zoukankan      html  css  js  c++  java
  • JSON续

      导航对象模型

    以下代码演示了一种导航对象模型的简单方法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    import javax.json.JsonValue;
    import javax.json.JsonObject;
    import javax.json.JsonArray;
    import javax.json.JsonNumber;
    import javax.json.JsonString;
    ...
    public static void navigateTree(JsonValue tree, String key) {
       if (key != null)
          System.out.print("Key " + key + ": ");
       switch(tree.getValueType()) {
          case OBJECT:
             System.out.println("OBJECT");
             JsonObject object = (JsonObject) tree;
             for (String name : object.keySet())
                navigateTree(object.get(name), name);
             break;
          case ARRAY:
             System.out.println("ARRAY");
             JsonArray array = (JsonArray) tree;
             for (JsonValue val : array)
                navigateTree(val, null);
             break;
          case STRING:
             JsonString st = (JsonString) tree;
             System.out.println("STRING " + st.getString());
             break;
          case NUMBER:
             JsonNumber num = (JsonNumber) tree;
             System.out.println("NUMBER " + num.toString());
             break;
          case TRUE:
          case FALSE:
          case NULL:
             System.out.println(tree.getValueType().toString());
             break;
       }
    }

      该方法navigateTree可以与内置的模型被用来 创建从JSON数据对象模型和 创建从应用程序代码的对象模型如下:

    1
    navigateTree(model, null);

      该navigateTree方法有两个参数:JSON元素和键。该键仅用于帮助打印对象内的键值对。树中的元素由JsonValue类型表示。如果元素是对象或数组,则对对象或数组中包含的每个元素进行此方法的新调用。如果元素是值,则将其打印到标准输出。

      该JsonValue.getValueType方法将元素标识为对象,数组或值。对于对象,该JsonObject.keySet方法返回一组包含对象中键的字符串,该 JsonObject.get(String name)方法返回其键所在元素的值name。对于数组,JsonArray实现 List<JsonValue>接口。您可以将增强for循环与 Set<String>实例返回的JsonObject.keySet实例一起使用JsonArray,如本示例所示。

    从Application Code创建对象navigateTree模型中构建的模型的方法产生以下输出:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    OBJECT
    Key firstName: STRING Duke
    Key lastName: STRING Java
    Key age: NUMBER 18
    Key streetAddress: STRING 100 Internet Dr
    Key city: STRING JavaTown
    Key state: STRING JA
    Key postalCode: STRING 12345
    Key phoneNumbers: ARRAY
    OBJECT
    Key type: STRING mobile
    Key number: STRING 111-111-1111
    OBJECT
    Key type: STRING home
    Key number: STRING 222-222-2222

      写入流:

     

    创建从JSON数据的对象模型创建从应用程序代码的对象模型的对象可被写入到使用一个流JsonWriter 类,如下所示:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import java.io.StringWriter;
    import javax.json.JsonWriter;
    ...
    StringWriter stWriter = new StringWriter();
    JsonWriter jsonWriter = Json.createWriter(stWriter);
    jsonWriter.writeObject(model);
    jsonWriter.close();
     
    String jsonData = stWriter.toString();
    System.out.println(jsonData);

      该Json.createWriter方法将输出流作为参数。该JsonWriter.writeObject方法将对象写入流。该 JsonWriter.close方法关闭基础输出流。

      以下示例使用try-with-resources自动关闭JSON编写器:

    1
    2
    3
    4
    5
    6
    7
    8
    StringWriter stWriter = new StringWriter();
    try (JsonWriter jsonWriter = Json.createWriter(stWriter)) {
       jsonWriter.writeObject(model);
    }
     
    String jsonData = stWriter.toString();
    System.out.println(jsonData);

      使用生成器编写JSON数据

    如何使用流API将JSON数据写入文件:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    FileWriter writer = new FileWriter("test.txt");
    JsonGenerator gen = Json.createGenerator(writer);
    gen.writeStartObject()
       .write("firstName", "Duke")
       .write("lastName", "Java")
       .write("age", 18)
       .write("streetAddress", "100 Internet Dr")
       .write("city", "JavaTown")
       .write("state", "JA")
       .write("postalCode", "12345")
       .writeStartArray("phoneNumbers")
          .writeStartObject()
             .write("type", "mobile")
             .write("number", "111-111-1111")
          .writeEnd()
          .writeStartObject()
             .write("type", "home")
             .write("number", "222-222-2222")
          .writeEnd()
       .writeEnd()
    .writeEnd();
    gen.close();

    此示例通过调用Json.createGenerator静态方法获取JSON生成器,该 方法将writer或输出流作为参数。该示例JSON数据写入到test.txt 通过嵌套的调用文件writewriteStartArraywriteStartObject,和writeEnd方法。该JsonGenerator.close 方法关闭底层的编写器或输出流。

  • 相关阅读:
    我的Asp.Net Hello World程序

    快速排序
    Python是一门什么样的语言
    Python开发简介
    LVS(Linux Viretual Server) 负载均衡器 + 后端服务器
    易迷糊题
    python语言入门 第四天
    日常练习 1.0
    User_Login_Register_Shopping 1.0
  • 原文地址:https://www.cnblogs.com/Teay/p/10668583.html
Copyright © 2011-2022 走看看