【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中数据的步骤: ...
随机推荐
- Access restriction: The type 'FileURLConnection' is not API
遇到这种报错,解决方案如下: 报错原因是访问限制报错 工具栏中Project>preferences>java-Compiler>Errors/Warnings>把右侧的[De ...
- bootstrap之google fonts
bootstrap之google fonts 在学习一个bootstrap时,看到了一行引用代码:@import url(http://fonts.googleapis.com/css?family= ...
- iOS中 将 颜色转化成图片
定义一个类方法: 声明: + (UIImage *)imageFromColor:(UIColor *)color; 实现: + (UIImage *)imageFromColor:(UIColor ...
- JavaScript 数组
JavaScript 数组 简介:数组是值的有序集合,JavaScript在同一个数组中可以存放多种类型的元素,而且是长度也是可以动态调整的,可以随着数据增加或减少自动对数组长度做更改. 一:创建数组 ...
- python中的参数问题
python中的有默认参数和可变参数之分 默认参数arg 可变参数args, kargs 默认参数arg就是调用指定参数 可变参数*arg调用时传入的的参数会被python自动包装为列表 可变参数ka ...
- SSHE框架整合(增删改查)
1.前期准备:jar包(c3p0.jdbc ,各个框架) web.xml文件:spring的 转码的,和Struts2的过滤器 <?xml version="1.0" e ...
- LabVIEW 吸星大法 - 看见的好东西都是我的(中篇)
前言 写了多年的LabVIEW程序,你是否面临这样的问题 总是在做一些重复的工作,感觉很没有意思: 总在不停的写代码,做类似的控件,实现相同的功能,丝毫没有成就感: 总在天加班,没有时间去提高自己; ...
- 【noip 2005】 采药
题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:" ...
- Lua源代码阅读分析问题列表(转)
最近正在阅读lua源码,遇到座灯塔,转载如下: 我个人的习惯是带着问题去研究一个新题目,比如这次阅读Lua代码,暂列下面这些问题. 1)什么是基于栈.基于寄存器的虚拟机(VM)设计?Lua如何实现基于 ...
- ratina 视网膜屏幕解决方案大全
第三方教程 http://www.tuicool.com/articles/JBreIn 知乎 https://www.zhihu.com/question/21653056 强烈推荐!!!最牛逼最专 ...