【问题标题】:How to convert string in json to json object如何将json中的字符串转换为json对象
【发布时间】:2018-06-09 17:19:00
【问题描述】:

我有这个json字符串

{
  "team": "xyz",
  "patern": "abc",
  "service": "{\"version\":0,\"name\":\"some_service_name\"}",
  "op": "{\"version\":0,\"name\":\"some_op_name\"}",
  .
  .
  .
}

并且想将其转换为 JsonObject,因为它内部有一个 json 字符串,所以我必须拉出 JsonElement 然后使用它。问题是 JsonElement“服务”和“操作”是字符串

我希望 JsonObject 像这样转换

   {
      "team": "xyz",
      "patern": "abc",
      "service": {"version":0,"name":"some_service_name"},
      "op": {"version":0,"name":"some_op_name"},
      .
      .
      .
    }

我已经尝试过 new JsonParser().parse(string) 和 new Gson().fromJson(string, JsonObject.class) 但它没有解决。也尝试过 Jolt,但它会将其解析为字符串。

我知道这可以通过将它映射到一个 java 类然后使用它来解决,但我想知道是否有办法在没有额外的 java 类的情况下摆脱它。

【问题讨论】:

  • 您的问题到底是什么?您对我们有什么期望?您需要解析服务和操作字符串,就像解析外部 JSON 字符串一样。你如何做到这一点并不重要。或者您需要退后一步,想知道为什么将 jsn 字符串作为 json 文档的值,然后重新设计系统。
  • 为此使用 GSON 转换。
  • 看看jackson
  • @JBNizet - 我使用的终端系统无法更改,它们在 json 文档中具有 json 字符串作为值。我必须进行处理才能获得所需的字段。我需要帮助来解析这些 json 字符串或将整个 json 字符串转换为标准 json(没有 json 字符串)
  • @SagarNayak - 我知道我可以添加一个 java 类并映射所有字段并且该解决方案有效,但我想要更简单的解决方案,我不需要创建额外的类。

标签: java json parsing gson jolt


【解决方案1】:

使用org.json 库:

 JSONObject jsonObj = new JSONObject("{\"team\": \"xyz\",\"patern\": \"abc\",
 \"service\": \"{\"version\":0,\"name\":\"some_service_name\"}\",
 \"op\": \"{\"version\":0,\"name\":\"some_op_name\"}\" }");

更多方法请查看此链接

http://www.java67.com/2016/10/3-ways-to-convert-string-to-json-object-in-java.html

【讨论】:

  • 这行不通。我需要帮助将 json 字符串作为 json 文档中的值并解析这些 json 字符串或将整个 json 字符串转换为标准 json(没有 json 字符串),我再次知道这可以通过将其映射到 java 类来完成,但我需要一个替代方案。
【解决方案2】:

这可能对你有帮助!

JSONEqualentBeanClass jSONEqualentBeanClass = null;
com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper();
try{
    jSONEqualentBeanClass  = mapper.readValue(yourJSONStr, JSONEqualentBeanClass.class);
}catch(Exception e){
 // 
}

【讨论】:

【解决方案3】:

我还没有找到方法来做到这一点。使用 Gson 虽然效果很好。我会做这样的事情。

Gson gson = new Gson();
Map res = gson.fromJson(string, Map.class);
Map service = gson.fromJson((String)res.get("service"), Map.class);
Map op = gson.fromJson((String)res.get("op"), Map.class);
res.put("service", service);
res.put("op", op);
String newString = gson.toJson(res);

【讨论】:

    猜你喜欢
    • 2018-01-06
    • 2019-08-27
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多