【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中数据的步骤: ...
随机推荐
- Simulink Memory vs Unit Delay
Memoryブロック.Unit Delayブロック共に前回の入力値を出力しますが.動作するタイミングが異なります. ●Memoryブロック シミュレーションの各時刻(ステップ)で動作し.「1ステップ」 ...
- 半吊子学习Swift--天气预报程序-获取天气信息
昨天申请的彩云天气Api开发者今天上午已审核通过  饭后运动过后就马不停蹄的来测试接口,接口是采用经纬度的方式来获取天气信息,接口地址如下 https://api.caiyunapp.com/v2/ ...
- 文件处理命令:sed
使用:sed [-nefr] actionaction:-i直接修改读取的档案内容,而不是由屏幕输出,-r表示支持延伸型正则表达式的语法.动作说明:[n1[,n2]] function n1,n2表示 ...
- 来自XP的道别信
当你们看到这封信的时候,很抱歉要和大家说再见了! 亲爱的你们,对不起,请不要为我哭泣,请让我们一起度过这最后的时光. 请记住那个在蓝天白云下奔跑的我!
- 关于H5框架之Bootstrap的小知识
浏览器支持 旧的浏览器可能无法很好的支持 Bootstrap 支持 Internet Explorer 8 及更高版本的 IE 浏览器 CSS源码研究 我们不是在head里面引入了下面这些文件么 &l ...
- 服务器使用FTP命令行 无法传送文件 卡在150 Opening data channel for file transfer
猜测,是因FTP服务器采用了主动模式,在创建数据传输通道时,服务器会以一个随机的端口,连接回来. 临时解决方案: 因不知道请求回来使用的哪个段的端口,因此,暂时关闭了防火墙.即能正常传输文件了.
- 20155315庄艺霖--对做中学的理解及对c语言和Java的看法
关于做中学的理解及技能训练的思考 在写这篇博客之前,我首先阅读了娄老师的博客,对做中学的概念很感兴趣.我们常说知识要学以致用,做中学强调的是在用的过程中有新的收获和体会来进一步巩固学习.细数我学过的课 ...
- Linux Shell 脚本调试
方法如下所示:(1) 使用选项–x,启用shell脚本的跟踪调试功能: $ bash -x script.sh 运行带有-x标志的脚本可以打印出所执行的每一行命令以及当前状态.注意,你也可以使用sh ...
- Unity自动寻路入门指南
所有用于成为NavMesh的网格都必须被指定为 Navigation Static . 方法如下,选中GameObject,然后在菜单栏的[Window]-[Navigation]-[Object]- ...
- C#中ToString格式大全
更多资源:http://denghejun.github.io C 货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5&q ...