zoukankan      html  css  js  c++  java
  • javascript JSON

    CreateTime--2016年10月12日09:28:09

    迁移时间--2017年5月16日10:19:12
    Author:Marydon

    二、javascript-JSON

      说明:本文主要讲的是在javascript中对JSON数据的操作,若想看java中如何对JSON对象进行操作,请见数据格式汇总2-java文章

      (一)格式介绍

        标准格式:

        {"键":值,"键":值,"键":值}(值可以是数字,不加双引号;也可以是字符串,需加双引号;值也可以包含一个对象)

        格式一:值存储的是多个对象

    {"data":[{"TERM":"第一期","WANGWU":199,"LISI":229,"ZHAOLIU":233,"SANQI":234,"ZHANGSAN":233},{"TERM":"第二期","WANGWU":156,"LISI":186,"ZHAOLIU":179,"SANQI":206,"ZHANGSAN":234},{"TERM":"第三期","WANGWU":133,"LISI":161,"ZHAOLIU":246,"SANQI":185,"ZHANGSAN":240},{"TERM":"第四期","WANGWU":194,"LISI":126,"ZHAOLIU":190,"SANQI":207,"ZHANGSAN":229},{"TERM":"第五期","WANGWU":149,"LISI":166,"ZHAOLIU":209,"SANQI":174,"ZHANGSAN":197}],"code":0,"expMsg":"","msg":"操作成功"}

        格式二:多个对象组成的数组

    var row = '[{"TERM":"第一期","WANGWU":199,"LISI":229,"ZHAOLIU":233,"SANQI":234,"ZHANGSAN":233},{"TERM":"第二期","WANGWU":156,"LISI":186,"ZHAOLIU":179,"SANQI":206,"ZHANGSAN":234},{"TERM":"第三期","WANGWU":133,"LISI":161,"ZHAOLIU":246,"SANQI":185,"ZHANGSAN":240},{"TERM":"第四期","WANGWU":194,"LISI":126,"ZHAOLIU":190,"SANQI":207,"ZHANGSAN":229},{"TERM":"第五期","WANGWU":149,"LISI":166,"ZHAOLIU":209,"SANQI":174,"ZHANGSAN":197}]';

     (二)操作JSON

      2.2.1 json赋值

        在js中,[]表示数组;{}表示Json对象。

         以将map形式的字符串转成JSON对象为例举例

        方式一:声明JSON对象

    /**
     * 将map形式的字符串转成JSON对象
     * @param {string} mapStr
     * java-Map格式字符串
     */
    function mapstringToJSON (mapStr) {
        // 1.去除字符串中所有的"
        mapStr = mapStr.replace(/"/g, "");
        // 2.去除掉"{}"
        mapStr = mapStr.substring(1, mapStr.length - 1);
        // 3.将map字符串用逗号拆分成数组
        var strs = mapStr.split(",");
        // 声明一个长度为2的数组
        var keyValue = new Array(2);
        // JSON-键    
        var key = "";
        // JSON-值
        var value = "";
        // 声明一个JSON对象
        var json = {};
        // 4.迭代map键值对
        $(strs).each(function(index, str) {
            keyValue = str.split("=");//按等号拆分成数组
            key = $.trim(keyValue[0]);
            value = $.trim(keyValue[1]);
            json[key] = value;// 动态值
            //json.key死值
        });
        
        return json;
    }
    
    var mapString = "{home=index, ForganizeCode=0, theme=window7, userAreaId=215, userManOrgs=10}";
    var jsonObj = mapstringToJSON(mapString);
    for (var key in jsonObj) {
        console.log(jsonObj[key]);
    }

         注意:说说JSON对象中的"."与"[]"操作符的区别:

          上面的key是动态的值,若用点操作,即json.key,其结果就是json对象中有且只有一个键:key,其他的键都没有加上;

          赋值上:点操作指定的是死键,[]操作既可用作表示死键,又可用作表示动态的键。

          取值上:没太大区别。

        方式二:字符串拼接

    /**
     * 将map形式的字符串转成JSON对象
     * @param {string} mapStr
     * java-Map格式字符串
     */
    function mapstringToJSON (mapStr) {
        // 1.去除字符串中所有的"
        mapStr = mapStr.replace(/"/g, "");
        // 2.去除掉"{}"
        mapStr = mapStr.substring(1, mapStr.length - 1);
        // 3.将map字符串用逗号拆分成数组
        var strs = mapStr.split(",");
        //JSON字符串
        var jsonStr = "";
        //声明一个长度为2的数组
        var keyValue = new Array(2);
        //JSON-键
        var key = "";
        //JSON-值
        var value = "";
        // 4.迭代map键值对
        $(strs).each(function(index, str) {
            keyValue = str.split("=");//按等号拆分成数组
            key = '"' + keyValue[0].trim() + '"';
            value = '"' + keyValue[1].trim() + '"';
            jsonStr += key + ":" + value + ",";//标准的JSON拼接格式
        });
        // 5.去除最后一个逗号并拼接"{}"
        jsonStr = "{" + jsonStr.substring(0, jsonStr.length - 1) + "}";
        // 6.json字符串转成JSON对象
        var json = eval('(' + jsonStr + ')');
        return json;
    }
    
    var mapString = "{home=index, ForganizeCode=0, theme=window7, userAreaId=215, userManOrgs=10}";
    var jsonObj = mapstringToJSON(mapString);
    for (var key in jsonObj) {
        console.log(jsonObj[key]);
    }

        注意: 

           JSON字符串拼接原则:

            1.键必须有双引号,不能是单引号;

            2.键值对之间用逗号隔开;

            3.键与值之间使用冒号。

       2.2.2 json格式取值

       UpdateTime--2016年10月25日11:37:09

        2.2.2.1 json格式的字符串取值

        数据格式

    var jsonStr = '{"data":[{"FSTATE":"1","FRCODE":"410000","FZJM":"YFBJK","ROWNO":"1","FREMARK":"","FDEPTNAME":"预防保健科","FPLVCODE":"","FDEPTCODE":"01"},{"FSTATE":"1","FRCODE":"410000","FZJM":"QKYLK","ROWNO":"2","FREMARK":"","FDEPTNAME":"全科医疗科","FPLVCODE":"","FDEPTCODE":"02"},{"FSTATE":"1","FRCODE":"410000","FZJM":"NK","ROWNO":"3","FREMARK":"","FDEPTNAME":"内科","FPLVCODE":"","FDEPTCODE":"03"},{"FSTATE":"1","FRCODE":"410000","FZJM":"WK","ROWNO":"4","FREMARK":"","FDEPTNAME":"外科","FPLVCODE":"","FDEPTCODE":"04"},{"FSTATE":"1","FRCODE":"410000","FZJM":"FCK","ROWNO":"5","FREMARK":"","FDEPTNAME":"妇产科","FPLVCODE":"","FDEPTCODE":"05"}],"code":0,"msg":"操作成功!","expMsg":""}';

        取值方法

    //取对象
    var jsonObj = eval('('+jsonStr+')');
    console.log(jsonObj.msg);
    //取数组元素
    var jsonObj = eval('('+jsonStr+')');
    var jsonObj2 = jsonObj.data;
    for (var i = 0; i <jsonObj2.length; i++) {
      console.log(jsonObj2[i].FDEPTNAME);
    }

        2.2.2.2 json格式取值

        数据格式

    var jsonStr = {"data":[{"FSTATE":"1","FRCODE":"410000","FZJM":"YFBJK","ROWNO":"1","FREMARK":"","FDEPTNAME":"预防保健科","FPLVCODE":"","FDEPTCODE":"01"},{"FSTATE":"1","FRCODE":"410000","FZJM":"QKYLK","ROWNO":"2","FREMARK":"","FDEPTNAME":"全科医疗科","FPLVCODE":"","FDEPTCODE":"02"},{"FSTATE":"1","FRCODE":"410000","FZJM":"NK","ROWNO":"3","FREMARK":"","FDEPTNAME":"内科","FPLVCODE":"","FDEPTCODE":"03"},{"FSTATE":"1","FRCODE":"410000","FZJM":"WK","ROWNO":"4","FREMARK":"","FDEPTNAME":"外科","FPLVCODE":"","FDEPTCODE":"04"},{"FSTATE":"1","FRCODE":"410000","FZJM":"FCK","ROWNO":"5","FREMARK":"","FDEPTNAME":"妇产科","FPLVCODE":"","FDEPTCODE":"05"}],"code":0,"msg":"操作成功!","expMsg":""};

        取值方法 

    //取对象
    console.log(jsonStr.msg);
    //取数组元素
    var jsonObj2 = jsonStr.data;
    for (var i = 0; i <jsonObj2.length; i++) {
        console.log(jsonObj2[i].FDEPTNAME);
    }

        2.2.2.3 json数组字符串格式的取值

        数据格式  

    var jsonStr = '[{"FSTATE":"1","FRCODE":"410000","FZJM":"YFBJK","ROWNO":"1","FREMARK":"","FDEPTNAME":"预防保健科","FPLVCODE":"","FDEPTCODE":"01"},{"FSTATE":"1","FRCODE":"410000","FZJM":"QKYLK","ROWNO":"2","FREMARK":"","FDEPTNAME":"全科医疗科","FPLVCODE":"","FDEPTCODE":"02"},{"FSTATE":"1","FRCODE":"410000","FZJM":"NK","ROWNO":"3","FREMARK":"","FDEPTNAME":"内科","FPLVCODE":"","FDEPTCODE":"03"},{"FSTATE":"1","FRCODE":"410000","FZJM":"WK","ROWNO":"4","FREMARK":"","FDEPTNAME":"外科","FPLVCODE":"","FDEPTCODE":"04"},{"FSTATE":"1","FRCODE":"410000","FZJM":"FCK","ROWNO":"5","FREMARK":"","FDEPTNAME":"妇产科","FPLVCODE":"","FDEPTCODE":"05"}]';

        取值方法

    //取数组元素
    var jsonObj = eval('('+jsonStr+')');
    for (var i = 0; i <jsonObj.length; i++) {
        console.log(jsonObj[i].FZJM);
    }

        2.2.2.4 json格式数组的取值

        数据格式  

    var jsonObj = [{"FSTATE":"1","FRCODE":"410000","FZJM":"YFBJK","ROWNO":"1","FREMARK":"","FDEPTNAME":"预防保健科","FPLVCODE":"","FDEPTCODE":"01"},{"FSTATE":"1","FRCODE":"410000","FZJM":"QKYLK","ROWNO":"2","FREMARK":"","FDEPTNAME":"全科医疗科","FPLVCODE":"","FDEPTCODE":"02"},{"FSTATE":"1","FRCODE":"410000","FZJM":"NK","ROWNO":"3","FREMARK":"","FDEPTNAME":"内科","FPLVCODE":"","FDEPTCODE":"03"},{"FSTATE":"1","FRCODE":"410000","FZJM":"WK","ROWNO":"4","FREMARK":"","FDEPTNAME":"外科","FPLVCODE":"","FDEPTCODE":"04"},{"FSTATE":"1","FRCODE":"410000","FZJM":"FCK","ROWNO":"5","FREMARK":"","FDEPTNAME":"妇产科","FPLVCODE":"","FDEPTCODE":"05"}];

        取值方法

    //取数组元素for (var i = 0; i <jsonObj.length; i++) {
        console.log(jsonObj[i].FZJM);
    }

        2.2.2.5 判断JSON对象是否为空

        jQuery.isEmptyObject(JSONObj)

      (三)格式转换

        3.3.1 json格式字符串与JSON对象的相互转化

          3.3.1.1 json格式字符串转换成JSON对象  

          方法:使用eval('(' + 字符串 + ')') 

             json格式字符串转换成object类型的数组(为了便于理解,可以看成java中的JSONArray)

    var jsonArray = eval("("+row+")");
    console.log(jsonArray);
    //"[object Object],[object Object],[object Object],[object Object],[object Object]"

          3.3.1.2 object类型(java中的JSONArray)转化成json字符串

          方法:使用JSON.stringify() 

    var str = JSON.stringify(jsonArray);
    console.log(str);
    //"[{"TERM":"第一期","WANGWU":199,"LISI":229,"ZHAOLIU":233,"SANQI":234,"ZHANGSAN":233},{"TERM":"第二期","WANGWU":156,"LISI":186,"ZHAOLIU":179,"SANQI":206,"ZHANGSAN":234},{"TERM":"第三期","WANGWU":133,"LISI":161,"ZHAOLIU":246,"SANQI":185,"ZHANGSAN":240},{"TERM":"第四期","WANGWU":194,"LISI":126,"ZHAOLIU":190,"SANQI":207,"ZHANGSAN":229},{"TERM":"第五期","WANGWU":149,"LISI":166,"ZHAOLIU":209,"SANQI":174,"ZHANGSAN":197}]"

        3.3.2 JSON对象转换成map字符串

    /**
     * 将JSON对象转换成map形式的字符串
     * @param {Object} jsonObj 
     *     JSON对象
     */
    function JSONToMapstring (jsonObj) {
        var mapString = "";
        //遍历JSON对象
        for (var item in jsonObj) {
            mapString += item + "=" + jsonObj[item] + ",";//标准的java—Map字符串拼接格式
        }
        //去除最后一个逗号并转成map形式字符串
        mapString = "{" + mapString.substring(0, mapString.length - 1) + "}";
        return mapString;
    }

          举例:

    //接着上面的例子
    var result = JSONToMapstring(jsonObj);
    console.log(result);//"{home=index,ForganizeCode=0,theme=window7,userAreaId=215,userManOrgs=10}"
  • 相关阅读:
    HDU 3681 Prison Break 越狱(状压DP,变形)
    POJ 2411 Mondriaan's Dream (状压DP,骨牌覆盖,经典)
    ZOJ 3471 Most Powerful (状压DP,经典)
    POJ 2288 Islands and Bridges (状压DP,变形)
    HDU 3001 Travelling (状压DP,3进制)
    POJ 3311 Hie with the Pie (状压DP)
    POJ 1185 炮兵阵地 (状压DP,轮廓线DP)
    FZU 2204 7
    POJ 3254 Corn Fields (状压DP,轮廓线DP)
    ZOJ 3494 BCD Code (数位DP,AC自动机)
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/6860083.html
Copyright © 2011-2022 走看看