我正在尝试使用GSON库将JsonObject转换为String。但是结果输出会多一层父“Map”包裹json。请告诉我我做错了什么,为什么会出现父“Map”层?
我甚至尝试通过使用new Gson().toJson(bean)来转换bean;但是输出结果还具有一层又一层的父“Map”来 Package json。
使用时需要满足的条件
1) Mutable object
2) GSON
3) method might handle other object Type
Maven项目使用如下图库:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
下面的Java代码(示例为只懂不懂的真实的代码,将在T中使用):
List<JSONObject> records = new ArrayList <JSONObject> ();
JSONObject bean = new JSONObject();
bean.put("A", "is A");
bean.put("B", "is B lah");
bean.put("C", "is C lah");
bean.put("D", "is D");
records.add(bean);
String JSONBody2 = new Gson().toJson(records);
输出应为[{"D":"is D","A":"is A","B":"is B lah","C":"is C lah"}]
但实际输出为[{"map":{"D":"is D","A":"is A","B":"is B lah","C":"is C lah"}}]
实际代码如下
public String Json( String json, List<T> list) {
String JSONBody = new Gson().toJson(list);
}
我需要通过使用gson序列化,这就是为什么我把T。但我不知道为什么“Map”出现在这里。因为以前它的工作没有父“Map” Package 。(相同的代码和相同的库,只是新的重新创建的项目,但有这个问题)
4条答案
按热度按时间rpppsulh1#
尝试
我会给予你[{“A”:“是A”,“B”:“是B拉”,“C”:“是C拉”,“D”:“是D”}]
你可以从这个链接得到更多更好的理解类型转换https://stackoverflow.com/a/27893392/4500099
uqdfh47h2#
使用
JSONArray
而不是List,它将给予您所需的输出:tf7tbtn23#
虽然其他人已经回答了这个问题,但我想强调一个重要的学习。有两种方法可以将JsonObject转换为字符串。一种是
new Gson().toJson(..)
,另一种是JsonObject.toString()
。虽然这两种方法在很多情况下会产生相同的结果,但是如果JsonObject有一些字符串字段包含有效的url或base64编码值,第一种方法会将
&
和=
转换为相应的utf-8代表字符,这将使您的url和base64编码值损坏。然而,第二种方法会保持这些值不变。2exbekwf4#
不要使用JSON对象,只使用Object
输出为
如果您查看org.json.JSONObject的实现,它内部包含一个名为map的变量,它在其中存储所有数据。
当GSON试图转换为JSON时,它只是递归地查看对象,并将所有变量转换为JSON。