在不使用其他库的情况下,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. 通过url传参

    简介: 通过url传单个和多个参数 你得配Route; 你得使用ui-sref传参数; 在你相关Route的Controller里面Inject $stateParams,然后取参数就OK. 实例: ...

  2. window下xampp配置多端口、多站点步骤

    好些日子没整理知识了,许多新东西不整理出来时间一长就淡忘了.看来以后得继续坚持整理. 配置XAMPP多端口.多站点如下步骤: 多端口: (一个域名下同时配置多个端口,从而达到访问不同程序) 效果例如: ...

  3. 【HDU】1599 find the mincost route

    题意 \(n(1 \le n \le 100)\)个点\(m(1 \le m \le 1000)\)条加权边的无负环无向图,求一个最小环. 分析 加入有一个环,其编号最大的点为\(L\),那么这个环可 ...

  4. HDU 4801 Pocket Cube

    题目链接 去年现场,虎哥1Y的,现在刷刷题,找找状态... 一共6种转法,把3个面放到顶部,左旋和右旋,感觉写的还不错....都写成常数了. #include <stdio.h> #inc ...

  5. css 浅析display属性

    继续开始我的css之旅吧.今天我们来说什么啊.构思了两天还是没有什么思路,但是学习的步伐我们不能停止下来.还是按照之前的计划来讲讲display,在讲这个之前我们还是按照老规矩来扯扯蛋,步子不能够迈大 ...

  6. C++:一般情况下,设计函数的形参只需要两种形式

    C++:一般情况下,设计函数的形参只需要两种形式.一,是引用形参,例如 void function (int &p_para):二,是常量引用形参,例如 void function(const ...

  7. java的基础知识运算符

    一.运算符. 1.算数运算符:+,-,*,/,% 2.自增自减 :++ ,-- ++在前 先运算在赋值 ++在后 先赋值后运算 -- 减减同上. 3.赋值运算符 : = ,+=,-=,*=,/= 4. ...

  8. Python之路【第二篇】python基础 之基本数据类型

    运算符 1.算数运算: 2.比较运算: 3.赋值运算: 4.逻辑运算: 5.成员运算: name = "yehaoran " # in 判断ye是否在name里面 在的话返回ok ...

  9. css屏蔽元素的鼠标事件pointer-events

    // 屏蔽点击 $('body').css('pointer-events', 'none'); //恢复默认 $('body').css('pointer-events', 'auto');   用 ...

  10. 串口实现FIFO接受数据

    基本原理:静态队列 /* * 串口的FIFO简单读取实现 * 功能,实现串口的FIFO实现 * 使用方法: * 版本:v1.0.0 * */ #include "sys.h" #i ...