Java 如何打印无转义符和引号的嵌套json对象

Java 如何打印无转义符和引号的嵌套json对象,java,json,nested,Java,Json,Nested,我有一个名为jsonObject { "action":"Read", "infos":[ { "value":0.0350661, "key":"first" } ] } 我想用下面的格式将json对象打印到 {"action":"Read","infos":[{"value":0.0350661,"key":"first"}]} 如果我使用jsonObject.toString()方法

我有一个名为
jsonObject

{
    "action":"Read",
    "infos":[
        {
            "value":0.0350661,
            "key":"first"
        }
    ]
}
我想用下面的格式将json对象打印到

{"action":"Read","infos":[{"value":0.0350661,"key":"first"}]}
如果我使用
jsonObject.toString()
方法,我将得到

{"action":"Read","infos":"[{\"value\":0.0350661,\"key\":\"first\"}]"}
{"action":"Read","infos":"[{"value":0.0350661,"key":"first"}]"}
如果我使用
StringEscapeUtils.unescapeJava(jsonObject.toString())
方法,我将得到

{"action":"Read","infos":"[{\"value\":0.0350661,\"key\":\"first\"}]"}
{"action":"Read","infos":"[{"value":0.0350661,"key":"first"}]"}
如果我将jackson mapper与以下代码一起使用

ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
String jsonString = mapper.writeValueAsString(getDebugInfo())
我将获得
jsonString
as

{"nameValuePairs":{"action":"Read","infos":[{"value":0.0350661,"key":"first"}]}}
是否有任何解决方案可以获得所需的输出json字符串?

  • JSON结构
你把它作为一个对象,这就是为什么这里没有引号

在您的示例中,Json结构中存在一个数组对象

  • 代码/Java
在控制台上打印时,会引用json主体的每个键和值toString()

这就是为什么在使用字符串时出现双引号的原因

  • JSON结构
你把它作为一个对象,这就是为什么这里没有引号

在您的示例中,Json结构中存在一个数组对象

  • 代码/Java
在控制台上打印时,会引用json主体的每个键和值toString()


这就是为什么在使用字符串时出现双引号的原因

在这里,我使用GSON库尝试了下面的代码,它正在为我打印正确的json,如上图所示

public static void main ( String [] args ) {

        JsonObject jsonObject = new JsonObject();
        jsonObject.addProperty("action", "Read");
        JsonArray jsonArr = new JsonArray();
        JsonObject jsonObject2 = new JsonObject();
        jsonObject2.addProperty("value", 0.0350661);
        jsonObject2.addProperty("key", "first");
        jsonArr.add(jsonObject2);
        jsonObject.add("infos", jsonArr);


        String jsonString = jsonObject.toString();
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        JsonElement json = gson.fromJson(jsonString,JsonElement.class);
        String jsonInString = gson.toJson(json);
        System.out.println(jsonInString);
}
输出:

{
  "action": "Read",
  "infos": [
    {
      "value": 0.0350661,
      "key": "first"
    }
  ]
}
即使我使用
org.json
形成jsonObject,并使用
System.out.println(jsonObject.toString())简单地打印它
{"action":"Read","infos":[{"value":0.0350661,"key":"first"}]}

因此,在这里,我不确定您是如何形成jsonObject的。

在这里,我使用GSON库尝试了下面的代码,它正在为我打印正确的json,如上图所示

public static void main ( String [] args ) {

        JsonObject jsonObject = new JsonObject();
        jsonObject.addProperty("action", "Read");
        JsonArray jsonArr = new JsonArray();
        JsonObject jsonObject2 = new JsonObject();
        jsonObject2.addProperty("value", 0.0350661);
        jsonObject2.addProperty("key", "first");
        jsonArr.add(jsonObject2);
        jsonObject.add("infos", jsonArr);


        String jsonString = jsonObject.toString();
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        JsonElement json = gson.fromJson(jsonString,JsonElement.class);
        String jsonInString = gson.toJson(json);
        System.out.println(jsonInString);
}
输出:

{
  "action": "Read",
  "infos": [
    {
      "value": 0.0350661,
      "key": "first"
    }
  ]
}
即使我使用
org.json
形成jsonObject,并使用
System.out.println(jsonObject.toString())简单地打印它
{"action":"Read","infos":[{"value":0.0350661,"key":"first"}]}

因此,在这里,不确定您是如何形成jsonObject的。

是您愿意使用的唯一库,还是使用
gson
或其他库的解决方案也可以接受?@Pshemo其他库也可以接受。我搜索了gson库,但没有找到可行的解决方案,==您说您有“json对象”。你是如何创造它的?如果它来自POJO,那么simple
Gson Gson=new Gson();字符串str=gson.toJson(myPOJO)
应该提供您想要的。您愿意使用的唯一库是
jackson
,还是使用
gson
或其他库的解决方案也可以接受?@Pshemo其他库也可以接受。我搜索了gson库,但没有找到可行的解决方案,==您说您有“json对象”。你是如何创造它的?如果它来自POJO,那么simple
Gson Gson=new Gson();字符串str=gson.toJson(myPOJO)应该给你你想要的。我知道,但我想得到json字符串的非指定版本,这意味着一个对象!我非常怀疑,这是可能的。我知道,但我想得到json字符串的非指定版本,这意味着一个对象!我非常怀疑,这是可能的。