解析JSON串

直接按字符串运算解析太容易出错了,这里介绍一种比较好的方式,即通过先反序列化JSON串,再读取Json串中数据。 下面以解析如下JSON串为例介绍代码示例:

{

    "a1": "1",
    "a2": "2",
    "a3": [
        {
            "b1": "3",
            "b2": "4"
        },
        {
            "b1": "5",
            "b2": "6"
        }
    ],
    "a4": [
        "7",
        "8"
    ]

}

可以参考使用JSON在线工具(如 http://www.kjson.com/ )进行解析。

C#版

下载源代码:http://downloads.cmcloud.cn/kis/kis_src/code/Json_CSharp_VS2010.rar

读取JSON方法1:用JavaScriptSerializer(微软自带的)

引用组件:System.Web.Extensions

using System.Web.Script.Serialization

private void ReadJson1() {

    string sJson = "{\"a1\":\"1\",\"a2\":\"2\",\"a3\":[{\"b1\":\"3\",\"b2\":\"4\"},{\"b1\":\"5\",\"b2\":\"6\"}],\"a4\":[\"7\",\"8\"]}";
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    Dictionary<string, object> json = (Dictionary<string, object>)serializer.DeserializeObject(sJson);
    object value;

    if (json.TryGetValue("a1", out value))
        MessageBox.Show(value.ToString()); // 输出:1

    if (json.TryGetValue("a2", out value))
        MessageBox.Show(value.ToString()); // 输出:2

}

读取JSON方法2:用Newtonsoft.Json

目标框架:.NET Framework 4及以上

引用组件:Newtonsoft.Json.dll

下载地址http://downloads.cmcloud.cn/kis/kis_src/Newtonsoft.Json.rar

using Newtonsoft.Json.Linq;

private void ReadJson2() {

    string sJson = "{\"a1\":\"1\",\"a2\":\"2\",\"a3\":[{\"b1\":\"3\",\"b2\":\"4\"},{\"b1\":\"5\",\"b2\":\"6\"}],\"a4\":[\"7\",\"8\"]}";
    string s = "";

    //反序列化              
    JObject O = JsonConvert.DeserializeObject(sJson) as JObject;    

    //使用索引器访问  
    s += "a1=" + O["a1"] + "\n";
    s += "a2=" + O["a2"] + "\n";
    s += "a3中的元素总数=" + O["a3"].Count() + "\n";
    s += "a3[0]的b1=" + O["a3"][0]["b1"] + "\n";
    s += "a3[0]的b2=" + O["a3"][0]["b2"] + "\n";
    s += "a3[1]的b1=" + O["a3"][1]["b1"] + "\n";
    s += "a3[1]的b2=" + O["a3"][1]["b2"] + "\n";
    s += "a4中的元素总数=" + O["a4"].Count() + "\n";
    s += "a4[0]=" + O["a4"][0] + "\n";
    s += "a4[1]=" + O["a4"][1] + "\n";

    MessageBox.Show(s);

}