【问题标题】:Is there a way to treat an object inside JSON as a String?有没有办法将 JSON 中的对象视为字符串?
【发布时间】:2018-11-02 19:17:29
【问题描述】:

我正在使用 Java,我有一些类似这样的 JSON:

{
    "objectList" : [{...}, {...}, ...], 
    "metadata" : {...}    
}

我想要做的是将列表和对象作为 JSON 字符串。所以基本上,我想把这个 JSON 反序列化成这样的对象:

{
    "objectList" : "[{...}, {...}, ...]", 
    "metadata" : "{...}"    
}

所以我可以对这些字符串做进一步的处理。

最好的方法是什么?

我对尝试使用字符串解析来提取我需要的数据犹豫不决,因为这些对象中的值可能会影响它的解析方式。

【问题讨论】:

  • 为什么您认为如果数据是字符串而不是解析的结构化值,处理数据会更容易?您想进一步处理什么?
  • @aman 这是 Java,不是 JavaScript!
  • @aman 我需要将 JSON 对象中的对象转换为字符串类型,而不是将整个 JSON 对象转换为字符串
  • @JBNizet 我有各种类型的元数据对象的类,所以我想将其反序列化为更具体的形式(例如,视频元数据与活动元数据)。这些类型的元数据包含不同的字段,所以我想获取元数据对象的字符串,确定它是元数据的类型,然后反序列化为所需的元数据类型。
  • 然后将其解析为 JSONObject(或您的解析器使用的任何通用类),然后要求解析器将该 JSONObject 解析为您的类。或者阅读您的 JSON 解析器的文档以允许直接将其解析为正确的类。 Jackson 可以使用字段值来决定它应该创建什么类:fasterxml.github.io/jackson-annotations/javadoc/2.9/com/…。这个例子是 XY 问题的典型例子:不要问你认为正确的解决方案,而是要问如何解决你面临的实际问题。

标签: java json deserialization


【解决方案1】:

如果我是你,我会使用一些 JSON 解析库(例如 Gson)将你的 JSON 转换为 JsonObject。然后,您可以使用JsonObject#getAsString 简单地将objectList 的值作为String 获取:

String json = "{\n" +
              "    \"objectList\" : \"[{...}, {...}, ...]\", \n" +
              "    \"metadata\" : \"{...}\"    \n" +
              "}";

JsonObject jsonObject = new Gson().fromJson(json, JsonObject.class);

System.out.println(jsonObject.get("objectList").getAsString());

输出:

[{...}, {...}, ...]

【讨论】:

  • 啊,这看起来是个好方法。你知道有没有办法用 Jackson Object Mapper 做到这一点?
  • 我确定有,但我从未使用过 Jackson;我可能无法提供任何进一步的帮助。
  • 明白了。我会进一步研究它,但这看起来是最好的方法。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多