zoukankan      html  css  js  c++  java
  • JSON学习笔记

    一,学习JSON

    1.JSON样式一:

    { "name":"runoob", "alexa":10000, "site":null, "sites":[ "Google", "Runoob", "Taobao" ] }

    2.JSON样式二(JSON 对象中可以包含另外一个 JSON 对象):

    myObj={
        "name":"runoob",
        "alexa":10000,
        "sites": {
            "site1":"www.runoob.com",
            "site2":"m.runoob.com",
            "site3":"c.runoob.com"
         }
    }
    注:访问方式:x = myObj.sites.site1; // 或者 x = myObj.sites["site1"];
      修改值方式:myObj.sites.site1 = "www.google.com"; // 或者 myObj.sites["site1"] = "www.google.com";
      
    删除对象方式:delete myObj.sites.site1; // 或者 delete myObj.sites["site1"];

    3.JavaScript获取JSON里对应值的方法

    var myObj, x;
    myObj = { "name":"runoob", "alexa":10000, "site":null };
    x = myObj["name"];

    4.JavaScript遍历JSON值的方法

    var myObj = { "name":"runoob", "alexa":10000, "site":null }; 
    for (x in myObj) {
      document.getElementById("demo").innerHTML += myObj[x] + "<br>";
    }

    5.JSON.parse(): 将一个 JSON 字符串转换为 JavaScript 对象。

    JSON.parse(text[, reviver])
    参数说明:text:必需,一个有效的JSON字符串
    reviver: 可选,一个转换结果的函数, 将为对象的每个成员调用此函数。
    <p id="demo"></p>
    <script> 
    var obj = JSON.parse('{ "name":"runoob", "alexa":10000, "site":"www.runoob.com" }');
    document.getElementById("demo").innerHTML = obj.name + ":" + obj.site;
    </script>

    6.JSON.stringify(): 于将 JavaScript 值转换为 JSON 字符串。

    JSON.stringify(value[, replacer[, space]])
    value:
      必需, 要转换的 JavaScript 值(通常为对象或数组)。
    replacer:
      可选,用于转换结果的函数或数组。如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:""。如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。当 value 参数也为数组时,将忽略 replacer 数组。
    space:
      可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 也可以使用非数字,如:
    var obj ={"name":"runoob","alexa":10000,"site":"www.runoob.com"};
    var myJSON = JSON.stringify(obj);
    document.getElementById("demo").innerHTML = myJSON;

    二,学习Json Schema

      Json Schema 模式是一种基于JSON格式定义,JSON数据结构的规范。
    1.
    Json schema 格式
     1 {
     2     "$schema": "http://json-schema.org/draft-04/schema#",
     3     "title": "Product",
     4     "description": "A product from Acme's catalog",
     5     "type": "object",
     6     "properties": {
     7         "id": {
     8             "description": "The unique identifier for a product",
     9             "type": "integer"
    10         },
    11         "name": {
    12             "description": "Name of the product",
    13             "type": "string"
    14         },
    15         "price": {
    16             "type": "number",
    17             "minimum": 0,
    18             "exclusiveMinimum": true
    19         }
    20     },
    21     "required": ["id", "name", "price"]
    22 }

    格式分析:

    $schema 描述
    $schema $schema 关键字状态,表示这个模式与 v4 规范草案书写一致。
    title 标题,用来描述结构
    description 描述
    type 类型
    properties 定义属性
    required 必需属性

    (1)object类型的关键字

    type 类型 
    properties 定义属性
    required 必需属性
    maxProperties 最大属性个数
    minProperties 最小属性个数

    (2)array的属性

    items array 每个元素的类型 
    minItems 约束属性,数组最小的元素个数
    maxItems 约束属性,数组最大的元素个数
    uniqueItems 约束属性,每个元素都不相同
    additionalProperties 约束items的类型,不建议使用
    Dependencies 属性依赖

    (3)string的属性

    maxLength 定义字符串的最大长度,>=0 
    minLength 定义字符串的最小长度,>=0
    pattern 用正则表达式约束字符串

    (4)integer的属性

    minimum 最小值
    exclusiveMinimum 如果存在 "exclusiveMinimum" 并且具有布尔值 true,如果它严格意义上大于 "minimum" 的值则实例有效。
    maximum 约束属性,最大值
    exclusiveMaximum 如果存在 "exclusiveMinimum" 并且具有布尔值 true,如果它严格意义上小于 "maximum" 的值则实例有效。
    multipleOf 是某数的倍数,必须大于0的整数

    (5)number的属性

    minimum 最小值
    exclusiveMinimum 如果存在 "exclusiveMinimum" 并且具有布尔值 true,如果它严格意义上大于 "minimum" 的值则实例有效。
    maximum 约束属性,最大值
    exclusiveMaximum 如果存在 "exclusiveMinimum" 并且具有布尔值 true,如果它严格意义上小于 "maximum" 的值则实例有效。

    (6)boolean的属性

    true or false

    (7)enum,null

    2.Json schema 应用关键字

     (1)$ref 用来引用其它schema

    "items": { "$ref": "#/definitions/positiveInteger" },
    (2)allOf 展示全部属性
    (3)anyOf 展示任意属性
    (4)oneOf 其中之一
    (5)not 非 * 类型
     {"allOf": [
        { "$ref": "#/definitions/address" },
        { "properties": {"type": { "enum": [ "residential", "business" ] }}}
      ]
     "anyOf": [
        { "type": "string" },
        { "type": "number" }
      ]
      "oneOf": [
        { "type": "number", "multipleOf": 5 },
        { "type": "number", "multipleOf": 3 }
      ]
      "not": { "type": "string" }
    }
    

    2.1.Json schema 应用关键字-definitions

      当一个schema写的很大的时候,可能需要创建内部结构体,再使用$ref进行引用,示列如下

    {
        "type": "array",
        "items": { "$ref": "#/definitions/positiveInteger" },
        "definitions": {
            "positiveInteger": {
                "type": "integer",
                "minimum": 0,
                "exclusiveMinimum": true
            }
        }
    }
    

    三,C#读写JSON文件

    0.JSON文件

    {
      "FormsTitle": "CWSL",
      "SupplierName": "济南医疗设备有限公司",
      "InboundDate": "2020-06-10",
      "ReceiptNo": "10462740",
      "TotalAmount": "987.5"
    } 

    1.读取(废弃,请使用序列化方法)

           // 读取
    private void button1_Click(object sender, EventArgs e) { StreamReader reader = File.OpenText(@"C:UserssourceCWSL.json"); // 读取文件 JsonTextReader jsonTextReader = new JsonTextReader(reader); // 文件浏览 JObject jsonObject = (JObject)JToken.ReadFrom(jsonTextReader); // json文件解读 string server = jsonObject["SupplierName"].ToString() + " "; server = server + jsonObject["InboundDate"].ToString() + " "; server = server + jsonObject["ReceiptNo"].ToString() + " "; server = server + jsonObject["TotalAmount"].ToString() + " "; server = server + jsonObject["AcceptanceOfThePeople"].ToString() + " "; server = server + jsonObject["Supplier"].ToString() + " "; server = server + jsonObject["WarehouseOperator"].ToString() + " "; System.Diagnostics.Debug.WriteLine(server); // 输出server值 reader.Close(); }

    2.序列化与反序列化方法:

       a.有实体:

    1 1.SerializeObject();  // 序列化
    2 // json 序列化后的字符串
    3 // rslt 实体类
    4 string json = JsonConvert.SerializeObject(rslt);//序列化
    5 
    6 2.DeserializeObject();  // 反序列化
    7 // Response 实体类
    8 // json 序列化后的字符串
    9 Response rslt1 = JsonConvert.DeserializeObject<Response>(json);//反序列化

       b.无实体-反序列化

    1 JObject jo = (JObject)JsonConvert.DeserializeObject(html);  // 反序列化为json
    2 if (jo != null)
    3 {
    4       if (jo["code"].ToString() == "100000")
    5       {
    6             return jo["text"].ToString();
    7       }
    8 }

    3.读取json文件的方法

      a.第一版

     1 Config config = new Config();
     2 
     3 string configStr = JsonfileTools.Readjson("SendDataZCCAconfig.json");
     4 config = JsonConvert.DeserializeObject<Config>(configStr);
     5 
     6         /// <summary>
     7         /// 读取同目录下JSON文件
     8         /// </summary>
     9         /// <param name="key">JSON文件中的key值</param>
    10         /// <returns>JSON文件中的value值</returns>
    11         public static string Readjson(string fileName)
    12         {
    13             using (System.IO.StreamReader file = System.IO.File.OpenText(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + fileName))
    14             {
    15                return file.ReadToEnd();
    16             }
    17         }

      b.第二版,改成泛型:

     1 Config config = new Config();
     2 config= JsonfileTools.ReadjsonT<Config>("SendDataZCCAconfig.json");
     3   /// <summary>
     4   /// 读取同目录下JSON文件
     5   /// </summary>
     6   /// <typeparam name="T">返回的类型</typeparam>
     7   /// <param name="fileName">打开的文件名</param>
     8   /// <returns>实体类</returns>
     9   public static T ReadjsonT<T> (string fileName)
    10   {
    11       using (System.IO.StreamReader file = System.IO.File.OpenText(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + fileName))
    12       {
    13           return JsonConvert.DeserializeObject<T>(file.ReadToEnd());
    14       }
    15   }

    4.保存json文件的泛型方法

     1   /// <summary>
     2         /// 写入同目录下JSON文件
     3         /// </summary>
     4         /// <typeparam name="T"></typeparam>
     5         /// <param name="fileName">保存使用的文件名</param>
     6         /// <param name="tParameter">实体类</param>
     7         /// <returns>成功状态</returns>
     8         public static bool WritejsonT<T>(string fileName, T tParameter)
     9         {
    10             string fp = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + fileName;
    11             try
    12             {
    13                 File.WriteAllText(fp, JsonConvert.SerializeObject(tParameter));  // 覆盖写入
    14                 return true;
    15             }
    16             catch
    17             {
    18                 return false;
    19             }
    20         }
    365个夜晚,我希望做到两天更一篇博客。加油,小白!
  • 相关阅读:
    POS门店数据同步系统建模(1)
    Json Formatter 1.0 Json格式化工具
    XLSReadWriteII 使用
    POS门店数据同步系统建模(2)
    内存泄漏superobject
    使用电脑查看android手机的短信与修改cmd窗口编码
    wordpress站点修改站点地址引起的图片地址修改
    系统子模块_EM310初始化子系统流程图
    mark
    系统子模块_短信命令语法设计
  • 原文地址:https://www.cnblogs.com/qq2806933146xiaobai/p/13140495.html
Copyright © 2011-2022 走看看