美文网首页
js JSON数据

js JSON数据

作者: 不退则进_笑 | 来源:发表于2021-04-15 16:25 被阅读0次
    概念:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不须要任何特殊的 API 或工具包。
    1.在 JSON 中有两种结构:对象和数组
    • 对象
        var o = {"name":"tom", "age":18,"num":17521029253}
    
    • 数组
      var jsonranklist=[{"name":"tom", "age":18,"num":17521029253},{"name":"marri", "age":19,"num":17521029253}]
    
    2. 在数据传输流程中,json 是以文本,即字符串的形式传递的,而 JS 操作的是 JSON 对象,所以,JSON 对象和 JSON 字符串之间的相互转换是关键。
    • JSON 字符串
    var jsonStr = '{"name":"Liza", "password":"123"}'
    
    • JSON 对象
    var jsonObj = {"name":"Liza", "password":"123"}
    
    • JSON 字符串转为 JSON 对象
    var jsonObj = JSON.parse(jsonStr)
    
    • JSON 对象转为 JSON 字符串
    var jsonStr = JSON.stringify(jsonObj)
    
    3.JSON 字符串的替换

    工作中经常遇到这样的字符串,如下:

    Image text

    需要经过替换后,才能从字符串转为 JSON 对象。这里我们需要使用 replaceAll 功能,将所有的‘ \" ’替换成""

    代码如下:

    var jsonStr=jsonStr.replace(new RegExp('\\"',"gm"), '"' )
    

    替换后的效果如下:

    Image text
    4.遍历 JSON 对象和 JSON 数组
    • 遍历 JSON 对象代码如下
    var packJson  = {"name":"Liza", "password":"123"} ;
    
    for(var k in packJson ){ //遍历packJson 对象的每个key/value对,k为key
       alert(k + " " + packJson[k]);
    }
    
    • 遍历 JSON 数组代码如下:
    var packJson = [{"name":"Liza", "password":"123"}, {"name":"Mike", "password":"456"}]
    
    for(var i in packJson){ //遍历packJson 数组时,i为索引
       alert(packJson[i].name + " " + packJson[i].password);
    }
    
    
    递归遍历
    • 例子 1:遍历 JSON 对象,遇到数组的时候,数组中有超过一个对象,删除第一个对象之后的所有对象
    Image text

    期望处理后的 JSON 如下:


    Image text

    递归代码如下:

       // 梳理
          function handleData(obj) {
            if (obj instanceof Array) {
              if (obj.length > 1) {
                obj.splice(1, obj.length - 1);
              }
              handleData(obj[0]);
            } else if (obj instanceof Object) {
              for (var index in obj) {
                var jsonValue = obj[index];
                handleData(jsonValue);
              }
            }
          }
    
          function jsonParse() {
            // 调用
            handleData(jsonObj);
            var last = JSON.stringify(jsonObj, undefined, 2);
            return last;
          }
    
    • 例子 2:JSON 对象递归查找目标节点(该节点是唯一的),找到后把 targetChildren 赋值给节点的 children
    Image text

    targetChildren 为


    Image text

    期望最后处理的 JSON 结果为:


    Image text

    说明 id === target 的这个对象,没有 children 这个属性

    
    function findTarget(obj,targetId,targetChildren){
        if(obj.id==targetId){
              obj.children=targetChildren;
              return true;
        }else{
              if(obj.children!=null){
                   for(var i=0; i<obj.children.length; i++){
                        var flag=findTarget(obj.children[i],targetId,targetChildren);
                        if(flag==true){
                              return true;
                        }
                   }
              }
        }
        return false;
    }
    
    

    相关文章

      网友评论

          本文标题:js JSON数据

          本文链接:https://www.haomeiwen.com/subject/bmzdlltx.html