在不使用其他库的情况下,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());
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]}

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

【WP开发】JSON数据的读与写的更多相关文章

  1. selenium实现excel文件数据的读、写

    在进行软件测试或设计自动化测试框架时,一个不可避免的过程就是: 参数 化,在利用 python 进行自动化测试开发时,通常会使用 excel 来做数据管 理,利用 xlrd.xlwt 开源包来读写 e ...

  2. ios开发 json数据文件的存取

    将Json存进本地文件夹     NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomai ...

  3. java 安卓开发之文件的读与写

    java文件的读与写,代码: String file="user.txt"; private void writeFileData(String str1, String str2 ...

  4. JSON数据解析(自写)

    自写的JSON解析数据 void setup() { Serial.begin(115200); char chArray[50] = "some characters"; Str ...

  5. AngularJS学习笔记(3)——通过Ajax获取JSON数据

    通过Ajax获取JSON数据 以我之前写的与用户交互的动态清单列表为例,使用JSON前todo.html代码如下: <!DOCTYPE html> <html ng-app=&quo ...

  6. Android-解析JSON数据(JSON对象/JSON数组)

    在上一篇博客中,Android-封装JSON数据(JSON对象/JSON数组),讲解到Android真实开发中更多的是去解析JSON数据(JSON对象/JSON数组) 封装JSON的数据是在服务器端进 ...

  7. iOS/macOS推荐个高效苹果开发工具, JSON 转模型代码工具,不再为复杂JSON数据写模型而烦恼,支持Swift/Objective-C,极速转换

    CCJSON 是一款运行在macOS上 JSON 转模型代码工具,不再为复杂JSON数据写模型而烦恼,可识别嵌套模型,字典/数组,支持Swift/Objective-C,操作方便,极速转换.下载 效果 ...

  8. 玩转iOS开发 - JSON 和 Xml 数据解析

    前言 Json 和xml是网络开发中经常使用的数据格式,JSON轻量级.xml相对较复杂.所以如今用JSON的比例很大.基本上从server获取的返回数据都是JSON格式的,作为iOS开发人员,解析J ...

  9. python 全栈开发,Day94(Promise,箭头函数,Django REST framework,生成json数据三种方式,serializers,Postman使用,外部python脚本调用django)

    昨日内容回顾 1. 内容回顾 1. VueX VueX分三部分 1. state 2. mutations 3. actions 存放数据 修改数据的唯一方式 异步操作 修改state中数据的步骤: ...

随机推荐

  1. 【BZOJ1911】[Apio2010]特别行动队 斜率优化DP

    想了好久啊....——黑字为第一次更新.——这里是第二次更新,维护上下凸包据题而论,第一种方法是化式子的方法,需要好的化式子的方法,第二种是偏向几何,十分好想,纯正的维护凸包的方法,推荐. 用了我感觉 ...

  2. 关于H5填写信息类页面横向布局总结

    接触h5已经有快一年了,因为一直偏向页面重构所以在页面布局方面也算是经历过风风雨雨.所以总结一下自己用过的方法来比较归纳 首先来说,H5的页面一般分为两种,一种是用来做市场营销的,主要特征是图多,页面 ...

  3. Mysql远程访问

    命令行: mysql -h 192.168.1.145 -u root -p 1.初始化root密码 进入mysql数据库 1mysql>update user set password=PAS ...

  4. 基于node.js的压缩合并安装

    1.构建工具(grunt,gulp) 下载地址:http://gruntjs.cn/http://gruntjs.com/ (1)安装nodejs(http://www.nodejs.org/) 验证 ...

  5. ajax的理解与工作流程

    一.什么是ajax ajax是一种异步通信技术.在ajax出现之前,客户端与服务端之间直接通信.引入ajax之后,客户端与服务端加了一个第三者--ajax.有了ajax之后,通过在后台与服务器进行少量 ...

  6. *HDU2147 博弈

    kiki's game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 40000/10000 K (Java/Others)Total ...

  7. 验证mongodb主从复制过程~记录操作

    接 mongodb的安装:http://www.cnblogs.com/myrunning/p/4319367.html 1.1创建数据目录 在这里我们将不使用mongodb的配置文件启动mongod ...

  8. C++文本处理_文件读写

    QT在进行文本读写时和C++一样,是基于文本流操作的. QT在读取全部文本时,相对比较便捷.使用readAll()函数,配合split()进行分隔符的拆分(例如行结束符"\n"), ...

  9. .保护Express应用程序

    毫无疑问,Node.js已经变的愈加成熟,尽管这样,开发者仍然缺乏大量的安全指南.在这篇文章中,我将分享一些有关Node.js安全要点给大家,希望大家能够谨记于心. 1.避免使用Eval Eval并不 ...

  10. 测试函数用Return 返回值和用函数名返回值的区别

    '*************************************************************************'**模 块 名:工程1 - Form1'**说   ...