zoukankan      html  css  js  c++  java
  • 【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(45));
                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}
    姓名:{1}
    城市:{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]}

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

  • 相关阅读:
    蓝桥杯 猴子分苹果
    蓝桥杯 王、后传说 dfs
    蓝桥杯 C*++ Calculations 贪心
    python random模块 分类: python python Module python基础学习 2013-06-26 12:06 383人阅读 评论(0) 收藏
    去除列表中不重复的元素 分类: python 小练习 2013-06-25 14:59 245人阅读 评论(0) 收藏
    去除文件每行的第一个字符 分类: python 2013-06-24 15:03 414人阅读 评论(0) 收藏
    用户输入内容长度限制的异常 分类: python异常 2013-06-24 10:48 335人阅读 评论(0) 收藏
    使用python下载文件 分类: python python下载 2013-06-22 16:58 277人阅读 评论(0) 收藏
    猜数字 分类: python 小练习 python基础学习 2013-06-20 15:16 160人阅读 评论(0) 收藏
    Linux系统中ls命令用法详解 分类: ubuntu 2013-06-20 14:29 261人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/tcjiaan/p/4265387.html
Copyright © 2011-2022 走看看