gpt4 book ai didi

添加到 JSON 响应的 Java JSON 反斜杠

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:12:38 25 4
gpt4 key购买 nike

为什么会出现这些反斜杠以及如何在浏览器向客户端显示 json 数据时删除它们?

如果那些反斜杠不存在,o/p json 响应似乎是有效的

testbookdata.xml

<Users>
<User>
<Name>Unni</Name>
<Books>
<Book>book1</Book>
<Book>book2</Book>
<Book>book3</Book>
</Books>
</User>
<User>
<Name>Ammu</Name>
<Books>
<Book>book1</Book>
<Book>book2</Book>
<Book>book4</Book>
</Books>
</User>
</Users>

此 xml 通过 org.json 库转换为 JSONObject

org.json.JSONObject xmlJSONObj = XML.toJSONObject(booksXMLString);

最后,我有一个类告诉我根据特定用户请求将所有内容转换为 JSON,

类的属性:

@JsonInclude(Include.NON_NULL)
@JsonProperty(value = "jsondata")
public String getJson() {
return json.toString();
}

如果我只是打印数据,

json data : ...
{"Users":{"User":[{"Name":"Unni","Books":{"Book":["book1","book2","book3"]}},{"Name":"Ammu","Books":{"Book":["book1","book2","book4"]}}]}}

最后是具有 public @ResponseBody 注释的 web 服务 Controller 方法调用服务并返回具有@Json 注释的对象

问题:

浏览器显示结果时是这样的——

"jsondata": "{\"Users\":{\"User\":[{\"Name\":\"Unni\",\"Books\":{\"Book\":[\"book1\",\"book2\",\"book3\"]}},{\"Name\":\"Ammu\",\"Books\":{\"Book\":[\"book1\",\"book2\",\"book4\"]}}]}}"
}

如何克服这个问题?

谢谢!

注意:我添加了 spring-mvc 标签,因为 @ResponseBody 是 spring-web 的一部分

更新 1:

再次尝试@Jon Skeet 提到的内容,但是出现错误,

org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: 
No serializer found for class org.json.JSONObject and no properties discovered to create
BeanSerializer (to avoid exception, disable SerializationConfig.SerializationFeature.FAIL_ON_EMPTY_BEANS) )
(through reference chain: com.ht.Result["jsondata"]);
nested exception is com.fasterxml.jackson.databind.JsonMappingException:
No serializer found for class org.json.JSONObject and no properties discovered
to create BeanSerializer (to avoid exception, disable SerializationConfig.SerializationFeature
.FAIL_ON_EMPTY_BEANS) )

最佳答案

据我了解,你有

class SomePojo {
public JSONObject json;
@JsonInclude(Include.NON_NULL)
@JsonProperty(value = "jsondata")
public String getJson() {
return json.toString();
}
}

@ResponseBody
@RequestMapping(..)
public SomePojo getPojo() {
SomePojo pojo = ...;
return pojo;
}

上面的模型基本上是说您有一个包含名称-值对的 JSON 对象。名称是 jsondata,值是一个 JSON 字符串。由于您的 String 值包含 JSON 字符串中 Not Acceptable 字符,因此必须在序列化值中对它们进行转义。

但是您似乎想要一个包含名称-值对的 JSON 对象,其中名称是 jsondata,值是另一个 JSON 对象。

你可能想要拥有

@JsonRawValue
@JsonInclude(Include.NON_NULL)
@JsonProperty(value = "jsondata")
public String getJson() {
return json.toString();
}

以便 String 值按原样使用,而不是转换为 JSON 字符串。

关于添加到 JSON 响应的 Java JSON 反斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25413093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com