【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());
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数据的读与写的更多相关文章
- selenium实现excel文件数据的读、写
在进行软件测试或设计自动化测试框架时,一个不可避免的过程就是: 参数 化,在利用 python 进行自动化测试开发时,通常会使用 excel 来做数据管 理,利用 xlrd.xlwt 开源包来读写 e ...
- ios开发 json数据文件的存取
将Json存进本地文件夹 NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomai ...
- java 安卓开发之文件的读与写
java文件的读与写,代码: String file="user.txt"; private void writeFileData(String str1, String str2 ...
- JSON数据解析(自写)
自写的JSON解析数据 void setup() { Serial.begin(115200); char chArray[50] = "some characters"; Str ...
- AngularJS学习笔记(3)——通过Ajax获取JSON数据
通过Ajax获取JSON数据 以我之前写的与用户交互的动态清单列表为例,使用JSON前todo.html代码如下: <!DOCTYPE html> <html ng-app=&quo ...
- Android-解析JSON数据(JSON对象/JSON数组)
在上一篇博客中,Android-封装JSON数据(JSON对象/JSON数组),讲解到Android真实开发中更多的是去解析JSON数据(JSON对象/JSON数组) 封装JSON的数据是在服务器端进 ...
- iOS/macOS推荐个高效苹果开发工具, JSON 转模型代码工具,不再为复杂JSON数据写模型而烦恼,支持Swift/Objective-C,极速转换
CCJSON 是一款运行在macOS上 JSON 转模型代码工具,不再为复杂JSON数据写模型而烦恼,可识别嵌套模型,字典/数组,支持Swift/Objective-C,操作方便,极速转换.下载 效果 ...
- 玩转iOS开发 - JSON 和 Xml 数据解析
前言 Json 和xml是网络开发中经常使用的数据格式,JSON轻量级.xml相对较复杂.所以如今用JSON的比例很大.基本上从server获取的返回数据都是JSON格式的,作为iOS开发人员,解析J ...
- python 全栈开发,Day94(Promise,箭头函数,Django REST framework,生成json数据三种方式,serializers,Postman使用,外部python脚本调用django)
昨日内容回顾 1. 内容回顾 1. VueX VueX分三部分 1. state 2. mutations 3. actions 存放数据 修改数据的唯一方式 异步操作 修改state中数据的步骤: ...
随机推荐
- JDBC
<java连接数据库> Class.forName("com.mysql.jdbc.Driver")--1:加载驱动 Connection conn=DriverMan ...
- 支付宝推AR实景红包,抢红包得拼脑力和体力
近年春节,各大互联网平台都会借机掀起"红包大战",其中支付宝和微信的红包玩法备受用户关注.今年,微信尚未公布春节红包相关的方案信息,不过,今天支付宝率先推出"AR实景红包 ...
- CS0103: The name ‘Scripts’ does not exist in the current context解决方法
转至:http://blchen.com/cs0103-the-name-scripts-does-not-exist-in-the-current-context-solution/ 更新:这个bu ...
- hadoop---前期准备---屌丝
hadoop要求有多台机子进行后续的数据处理,作为屌丝一枚,怎么才能搭建一个合适的环境学习hadoop?这就是本篇将要介绍的----前期准备. 搭建环境没啥好说的,说一下搭建环境多需要的吧 硬件:电脑 ...
- 关于call和apply函数的区别及用法
call和apply函数是function函数的基本属性,都可以用于更改函数对象和传递参数,是前端工程师常用的函数.具体使用方法请参考以下案列: 例如: 申明函数: var fn = function ...
- errno
关于errno有以下需要注意: 1 A common mistake is to do if (somecall() == -1) { printf("som ...
- Flask 重新认识
总是觉的学习东西有点猴子掰玉米的感觉.今天就重新再掰一次吧. Installation: 安装之前建议先安装virtualenv,这个东东是帮助你在多个python版本之间保持同步,不至于python ...
- vue.js的基本操作
1.{{message}}输出data数据中的message. 2.v-for="todo in todos"输出data数据中的dotos数组 3.v-on:click=&quo ...
- LabVIEW 吸星大法 - 看见的好东西都是我的(中篇)
前言 写了多年的LabVIEW程序,你是否面临这样的问题 总是在做一些重复的工作,感觉很没有意思: 总在不停的写代码,做类似的控件,实现相同的功能,丝毫没有成就感: 总在天加班,没有时间去提高自己; ...
- shell去除换行和空格2
#!/bin/bash if [ -f str.txt ] ## 如果str.txt存在,则返回true then strval=$(cat str.txt|awk '{printf "%s ...