【WP开发】JSON数据的读与写

在不使用其他库的情况下,WP-RT应用中也可以处理JSON数据。主要的几个类都放到Windows.Data.Json命名空间中:

IJsonValue接口作为用于封装JSON数据的规范,其中只读属性ValueType通过JsonValueType枚举来标识JSON值的类型,如String表示JSON的值是字符串,Number表示数值等。

实现IJsonValue接口的类都用于处理JSON数据,比如JsonObject表示单个JSON对象,JsonArray表示数组等。

可能大家觉得我前面说的都是废话,确实挺废的,其实这些类型用起来也不那么复杂,大家只要多写写多耍耍就可以掌握了。

所以,我们用一堆例子来试玩一下。

1、创建JSON数组,并向其中添加元素。

            // JSON数组
            JsonArray arr = new JsonArray();
            // 向数组中添加元素
            arr.Add(JsonValue.CreateNumberValue(100d));
            arr.Add(JsonValue.CreateNumberValue(200d));
            arr.Add(JsonValue.CreateStringValue("hot dog"));
            // 将JSON数组表示为字符串
            string jsonstr = arr.Stringify();
            Debug.WriteLine(jsonstr);

Stringify方法可以提取JSON对象的字符串表示形式。得到结果如下:

[100,200,"hot dog"]

 

2、也可以用JsonObject类来创建JSON对象。

            JsonObject obj = new JsonObject();
            // 设置各字段的名字和值
            obj.SetNamedValue("工号", JsonValue.CreateStringValue("000-410002"));
            obj.SetNamedValue("姓名", JsonValue.CreateStringValue("王小狗"));
            obj.SetNamedValue("年龄", JsonValue.CreateNumberValue(45));
            obj.SetNamedValue("婚否", JsonValue.CreateBooleanValue(true));
            // 提取字符串
            string jsstr = obj.Stringify();
            Debug.WriteLine(jsstr);

各位知道,JSON对象是用一对大括号来包装的,每个字段用逗号隔开,而字段名和值之间由冒号隔开,即字段包括名字和具体的值,故SetNamedValue方法定义如下:

void SetNamedValue(string name, IJsonValue value);

name表示JSON对象的字段名,而value是值,因为JSON的值也可以是复杂的类型,因为value参数定义为IJsonValue类型,即凡实现IJsonValue按口的类型都OK。

上面例子得到的结果如下:

{"工号":"000-410002","姓名":"王小狗","年龄":45,"婚否":true}

 

 

3、从字符串生成JSON数据。

可以分析表示JSON的字符串,然后生成相关类型。

            string tststr = "{\"ID\":\"40033201\", \"Name\":\"小明\", \"City\":\"天津\"}";
            JsonObject obj = JsonObject.Parse(tststr);
            // 获取各字段的值
            string id = obj.GetNamedString("ID");
            string name = obj.GetNamedString("Name");
            string city = obj.GetNamedString("City");
            string display = string.Format("学号:{0}\n姓名:{1}\n城市:{2}", id, name, city);
            Debug.WriteLine(display);

Parse是静态方法,传入表示JSON数据的字符串,就可以产生对应的实例对象。要从JSON数据中读取指定字段的值,可以调用GetNamedXXX,如上面示例中要获取的值是字符串类型的,因而调用GetNamedString方法。

上面的执行结果如下:

学号:40033201
姓名:小明
城市:天津

 

好了,以上几个例子比较TMD简单,我350%相信大家能看懂,下面咱们来个BT一点的,看看嵌套的JSON对象。

            JsonObject 中奖人 = new JsonObject();
            // 子对象
            JsonObject 地址 = new JsonObject();
            地址.SetNamedValue("", JsonValue.CreateStringValue("广东"));
            地址.SetNamedValue("", JsonValue.CreateStringValue("汕头"));
            地址.SetNamedValue("详细地址", JsonValue.CreateStringValue("不告诉你"));
            // 子对象
            JsonArray 中奖号码 = new JsonArray();
            中奖号码.Add(JsonValue.CreateNumberValue(5d));
            中奖号码.Add(JsonValue.CreateNumberValue(27d));
            中奖号码.Add(JsonValue.CreateNumberValue(2d));
            中奖号码.Add(JsonValue.CreateNumberValue(32d));
            // 设置字段
            中奖人.SetNamedValue("姓名", JsonValue.CreateStringValue("超级赌圣"));
            中奖人.SetNamedValue("住址", 地址);
            中奖人.SetNamedValue("个人简介", JsonValue.CreateStringValue("赌遍太阳系无敌手"));
            中奖人.SetNamedValue("中奖号码", 中奖号码);

            string str = 中奖人.Stringify();
            Debug.WriteLine(str);

得到结果如下:

{"姓名":"超级赌圣","住址":{"省":"广东","市":"汕头","详细地址":"不告诉你"},"个人简介":"赌遍太阳系无敌手","中奖号码":[5,27,2,32]}

 

最后感谢大家观看本期的老周吹牛节目。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。