JSONP 一款标准的 JSON JavaScript API 跨域数据交换格式类库

发布于 2018-09-10 字数3177 浏览 827 评论 0

JSON 是一种轻量级的数据交换格式,可以用于 Web 应用程序、REST 服务和 NoSQL 数据库。随着网络的普及,JSON 和 JSON 库的到来,为 JavaScript 平台开发人员提供了各种便利,同时对于 JSON 的操作和解释需要标准化。

JSON-P 被分成两个 API,流 API(javax.json.stream)和对象模型 API(javax.json)的。流 API 是一个低级别的,有效的方式来解析和生成 JSON。由两个主要的抽象,JsonParser JsonGenerator。JsonParser 是分析器,它允许向前一拉,只读访问一个 JSON 输入源。JsonGenerator 提供方法来写 JSON 流,并允许方法链。

流API

大家来看一段JSON

[
  {
    "type" : "home",
    "number" : "(800) 111-1111"
  },
  {
    "type" : "cell",
    "number" : "(800) 222-2222"
  }
]

我们用 JsonParser 来解析,并输出结果

JsonParserFactory factory = Json.createParserFactory(null);
JsonParser parser = factory.createParser(new StringReader(json));

while (parser.hasNext()) {
  Event event = parser.next();

  switch (event) {
    case KEY_NAME: {
      System.out.print(parser.getString() + "="); break;
    }
    case VALUE_STRING: {
      System.out.println(parser.getString()); break;
    }
  }
}

type=home
number=(800) 111-1111
type=cell
number=(800) 222-2222

JsonGenerator的例子,把结果输出到System.Out

JsonGeneratorFactory factory = Json.createGeneratorFactory(null);
JsonGenerator generator = factory.createGenerator(System.out);

generator.writeStartArray().
  writeStartObject().
    write("type", "home").
    write("number", "(800) 111-1111").writeEnd().
  writeStartObject().
    write("type", "cell").
    write("number", "(800) 222-2222").writeEnd().
  writeEnd().close();

对象模型 API

这是一个简单的,易于使用,高层次的 API,实现顶部的流 API。它创建了一个树形结构,代表中的 JSON 数据存储器,它可以很容易地导航和查询。

JsonObject 中提供了一个地图视图从模型访问名称/值对的无序集合。

JsonArray 提供了一个列表视图访问有序值序列。

要创建这些对象模型,你可以使用的建设者的模式(JsonObjectBuilder JsonArrayBuilder)或使用 JsonReader 从输入源(的InputStream或Reader)读取它们。然后您可以写这些对象模 型(OutputStream 或 Writer)使用 JsonWriter 的输出源。

这里是创建 JsonArray 使用 JsonArrayBuilder 的一个例子

JsonBuilderFactory factory = Json.createBuilderFactory(null);
JsonArray jsonArray = factory.createArrayBuilder()
    .add(factory.createObjectBuilder().
        add("type", "home").
        add("number", "(800) 111-1111"))
    .add(factory.createObjectBuilder().
        add("type", "cell").
        add("number", "(800) 222-2222")).build();

下面的例子是 JsonReader。

try (JsonReader jsonReader = Json.createReader(new StringReader(json))) {
  JsonArray array = jsonReader.readArray();
  System.out.println(array);
}

下面的例子 JsonWriter

try (JsonWriter jsonWriter = Json.createWriter(System.out)) {
  jsonWriter.writeArray(jsonArray);
}

JSON-P 的 beta 版本,可以下载使用,请点击这里 或请访问官方的  Java API的JSON处理  网站。

如果你对这篇文章有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助。

扫码二维码加入Web技术交流群

您暂时不能评论!

管理员开启了需要登录才能够评论,你可以免费注册一个本站的账号。

还没有评论!

目前还没有任何评论,快来抢沙发吧!