zoukankan      html  css  js  c++  java
  • 操作JSON对象

    JSON类型对象,最简单了,就是键值对,key:value、key:value、一直不停地key:value下去,层层嵌套,理论上多少层都可以,只要你喜欢。

    可是,每次应用JSON,我都心烦意乱,甚至吓到面无人色。何哉?不懂咯,没有真正理解咯,拿到一个JSON对象,不知道如何去使用它,如何去读取里面的数据。

    只能够一点一点地记录一些心得,期待量变达成质变,化蛹成蝶,肩胛骨处长出一对翅膀来。


    1、JS里面使用

    1)用key直接访问对应的value

    比如:

    var jsonobj ={"total":106,"rows":[{},{},{}.....]}
    alert(jsonobj.total);
    

    2)遍历key

    var smsTypeDesc = {"4":"回访短信","3":"邮件短信","aa":"测试短信"};  
    function EnumaKey(){  
        for(var key in smsTypeDesc){  
            alert(key);  
        }  
    }  
    function GetVal(){  
        var key = prompt("请输入要查询的key","4");  
                    if("undefined"==typeof(smsTypeDesc)) return;  
        if("undefined"==typeof(smsTypeDesc[key])){  
            alert("输入的key:"+key+", 在json对象中不存在!");  
            return;  
        }     
        alert("您输入的key是:"+key + ",该key所对应的值是:"+smsTypeDesc[key]);  
    }  
    function GetValByKey(){  
        alert(smsTypeDesc.aa);  
    }  

    本例子摘自 http://blog.csdn.net/love__coder/article/details/7532616


    3、提交或获取服务器端的JSON数据

    $.ajax({
        url: "/api/customview/SetTags?account=" + _index_account,
        data: JSON.stringify(effectRow),
        dataType: "json",
        type: "POST",
        contentType: "application/json; charset=utf-8",
        success: function (data) {
            _dg.datagrid('acceptChanges');
            if (data == true) {
                if (setTagsCallback != null) setTagsCallback();
                alert("OK");
            } else {
                alert("failed");
            }
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert(textStatus + ": " + errorThrown);
        }
    });

    2、.NET里使用

    .NET中操作JSON,非newtonsoft.json莫属。

    newtonsoft.json里面的类型,目前来看,有以下类型:


    JObject

     用于操作JSON对象
    JArray
     用语操作JSON数组
    JValue
     表示数组中的值
    JProperty
     表示对象中的属性,以"key/value"形式
    JToken
     用于存放Linq to JSON查询后的结果


    参考文章:http://www.cnblogs.com/usharei/archive/2012/04/24/2467578.html

    有代码有J8:

    [csharp] view plaincopy
    1. using Newtonsoft.Json;  
    2.   
    3. JObject json = ...  
    4.   
    5. JToken[] jps = json["records"][0].ToArray();  
    6. List<ItemInfo> cols = json["columns"].ToObject<List<ItemInfo>>();  
    7.   
    8. ……  
    9.   
    10. JArray array = new JArray();  
    11. array.Add(data);  
    12. Tuple<int, JObject> tuple = customViewService.UpdateDataByView(ProjectId, account, array, viewId);  
    13. JObject ret = new JObject();  
    14. ret.Add(new JProperty("rows", array));  
    15. ret.Add(new JProperty("result", tuple.Item1 > 0));  

    遍历,在不清楚该JSON的结构情况下:

    [csharp] view plaincopy
    1. JsonTextReader reader = new JsonTextReader(new StringReader(sjson));  
    2. StringBuilder sb = new StringBuilder("");  
    3. while (reader.Read())  
    4. {  
    5.     if (reader.Value != null)  
    6.         sb.Append(String.Format("Token: {0}, Value: {1} ", reader.TokenType, reader.Value));  
    7.     else  
    8.         sb.Append(String.Format("Token: {0} ", reader.TokenType));  
    9. }  

  • 相关阅读:
    poj 1904 King's Quest
    【BZOJ】1051: [HAOI2006]受欢迎的牛
    hdu 2767 Proving Equivalences
    hdu 3234 Exclusive-OR
    poj 1988 Cube Stacking
    poj 1733 Parity game
    hdu 3047 Zjnu Stadium 带权并查集
    poj 1182 食物链 种类并查集
    HDU 3749 Financial Crisis
    【BZOJ】1046 : [HAOI2007]上升序列
  • 原文地址:https://www.cnblogs.com/leftfist/p/4257800.html
Copyright © 2011-2022 走看看