Json解析

来源:互联网 发布:铃声助手mac版下载 编辑:程序博客网 时间:2024/04/29 07:58
什么是json?

【百科-Json】https://baike.so.com/doc/663437-702310.html

简单的说:json是一种数据格式,以string类型存储,是一种可嵌套的键值对。

json数据可分为2类:Json对象、Json数组

json对象被{ }抱着,而json数组在 [ ]的怀里。


1、最简单的json对象

{

        "name":"张三",

        "age":"16",

        "wife":"李四"

}


这是个json对象,被{ }抱着,名叫张三,二八妙龄,娶妻李四。

里面有3个键值对,被","隔开。

每个键值对的"键"在":"之前,值在":"之后。


2、嵌套json对象

{

        "name":"张三",

        "age":"16",

        "wife":{

                "name":"李四",

                "age":"19",

                "add":"北京"

        }

}

这里可以看到,wife的值变成了一个被{ }抱着的json对象,而不仅仅是一个名字代号。

wife这个json对象名叫李四,年方19(张三报金砖),京城人。


3、嵌套json数组

{

        "name":"张三",

        "age":"16",

        "wife":{

                "name":"李四",

                "age":"19",

                "add":"北京",

                "son":[

                        {

                                "name":"王二",

                                "birth":"2015"

                        },

                        {

                                "name":"王三",

                                "birth":"2016"

                        },

                        {

                                "name":"王四",

                                "birth":"2017"

                        }

                ]

        }

}

这个wife带来仨儿子,wife的son对应的值是一个json数组,数组里面又有3个json对象

可以看到json数组也可以作为键值对的"值"出现。


如何解析Json?

1、找目标

我们要明白我们想要什么数据,比如对应上面的json数据 我们想掌握 张三老婆所有儿子的资料


2、逐步解

按照json字符串到json对象——获取wife对象——获取son数组——遍历son数组,获得每个son对象——Log每个son对象的属性 的顺序。


2.1  获取张三json对象

JsonData  zsObject=JsonMapper.ToObject (json);

使用JsonMapper.ToObject把json字符串变成了zsObject这个json对象;


2.2  捕捉张三老婆这个json对象

JsonData wifeObject = zsObject ["wife"];

JsonData通过“键”名获取“值”的方法,此处zsObject ["wife"]的值wifeObject是json对象,仍然为JsonData类型。


2.3  获取张三老婆的儿子json数组

JsonData sonArray=wifeObject ["son"];

此处wifeObject ["wife"]的值sonArray是json数组,同样为JsonData类型。


2.4  遍历张三老婆的儿子们sonArray,获得每一个儿子json对象

for (int i = 0; i < sonArray.Count; i++) {

        JsonData sonObject=sonArray;

}


2.5  对于每个儿子json对象,把他打出来

for (int i = 0; i < sonArray.Count; i++) {

        JsonData sonObject=sonArray;

        Debug.Log (sonObject["name"].ToString()+sonObject["birth"].ToString());

}


综上可得解析代码 :

public void decode(string json){
                JsonData zsObject = JsonMapper.ToObject (json);
                JsonData wifeObject = zsObject ["wife"];
                JsonData sonArray=wifeObject["son"];
                for (int i = 0; i < sonArray.Count; i++) {
                        JsonData sonObject=sonArray;
                        Debug.Log (sonObject["name"].ToString()+sonObject["birth"].ToString());
                }
        }

技巧:

  • 命名:有意义、易牢记,"键名+类型"最好。如:wifeObject代表"wife"对应的json对象;sonArray代表"son"对应的json数组
  • 对象先找键,数组轮一遍。    如果当前json数据是json对象,进行下一步的时候肯定是根据键值对的”键”获取相应的值(普通值、对象、数组);如果当前json数据是json数组,那么就遍历这个数组获取数组中的每一个json对象,再进行处理。
  • 瞄准方能手快。拿到一个看起来很杂乱无章的json数据,建议先建个文本把json字符串粘进去,参照上面的格式排版,视野瞬间清晰,手速立马跟上。




Practice :


请使用LitJson把下面的json中的所有"w"字段拼接起来:

{

   "sn":1,
   "ls":false,
   "bg":0,
   "ed":0,
   "ws":[
                {
                        "bg":0,
                        "cw":[
                                {
                                        "sc":0.00,
                                        "w":"你"
                                },
                                {
                                        "sc":0.00,
                                        "w":"儿子"
                                },
                                {
                                        "sc":0.00,
                                        "w":"呢"
                                },
                                {
                                        "sc":0.00,
                                        "w":"?"
                                }
                },
                {
                        "bg":0,
                        "cw":[
                                {
                                        "sc":0.00,
                                        "w":"在"
                                },
                                {
                                        "sc":0.00,
                                        "w":"隔壁"
                                },
                                {
                                        "sc":0.00,
                                        "w":"玩"
                                },
                                {
                                        "sc":0.00,
                                        "w":"。"
                                }
                },
}




原创粉丝点击