【问题标题】:How do I tokenize array of json objects?如何标记 json 对象数组?
【发布时间】:2019-02-12 16:35:07
【问题描述】:

您好,我需要标记一个 json 对象数组,但我不确定如何去做。

目前,我有这个sn-p:

StringTokenizer tokenizer = new StringTokenizer(request, "{}:,\"");
Map<String, String> properties = new HashMap<String, String>();
while(tokenizer.hasMoreTokens()) {
    String key = tokenizer.nextToken(); 
    String value = tokenizer.nextToken();
    properties.put(key, value);
}

这个 sn-p 允许我标记一个常规(非复杂)json 对象,以便我可以使用键作为查找来获取值。但是,它不适用于[{"Foo":"Bar", "XYZ":12}, {"ABC":16, "Foo": "Bar"}...]等形式的复杂对象

所以我想知道如何标记一个 json 对象数组?

【问题讨论】:

  • 有什么理由不使用现有的库来完成这项工作吗?
  • @ngueno 我正在维护旧代码,我无法将新库添加到代码中。我还可以在 Java 1.6 中使用其他东西吗?
  • 不幸的是,Java 没有像 Gson 或 Jackson 那样提供任何有意义的工具,我认为在您的项目中手动编写 JSON 解析器不是一个好主意。提到的库都经过了很好的测试,并得到了很多社区的支持。
  • 写一个 JSON 解析器比你想象的更烦人。 Java 1.6 中没有对 JSON 的原生支持(即使在 2018 年使用扩展支持包也已停产)。不能添加库的想法是......无论是谁做出的决定都是一个愚蠢的决定,因为添加一个已知良好的库比维护自己的 JSON 解析器的风险小。

标签: java json jsp struts tokenize


【解决方案1】:

Regex 不适合解析或标记 JSON。而是使用解析器解析 JSON,例如Gson:

String json = "[{\"Foo\":\"Bar\", \"XYZ\":12}, {\"ABC\":16, \"Foo\": \"Bar\"}]";
Map<String, String>[] result = new Gson().fromJson(json, new TypeToken<Map<String, String>[]>() {}.getType());
System.out.println(Arrays.toString(result));

将在下面输出显示两个Map 对象:

[{Foo=Bar, XYZ=12}, {ABC=16, Foo=Bar}]

【讨论】:

  • 我无权访问 Gson。我正在维护旧代码,我无法将新库添加到代码中。我还可以在 Java 1.6 中使用其他东西吗?
猜你喜欢
  • 2021-05-18
  • 2022-10-23
  • 2022-11-11
  • 2019-11-25
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多