我尝试通过使用GSON库将JsonObject转换为String。但是结果输出将有一层父“地图”包装了json。请让我知道我做错了什么,为什么父级“地图”层会出现?
我什至尝试通过使用new Gson()。toJson(bean)来隐藏bean。但是输出结果还包含一层父级“ map”,用于包装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”出现在这里。与以前一样,它无需父级“地图”即可完成工作。 (相同的代码和相同的库只是新创建的项目,但存在此问题)
答案 0 :(得分:0)
使用JSONArray
代替List,它将为您提供所需的输出:
JSONArray records = new JSONArray();
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.put(bean);
String JSONBody2 = new Gson().toJson(records);
答案 1 :(得分:0)
尝试
String JSONBody2 = record.toString());
会给您[{“ A”:“是A”,“ B”:“是B lah”,“ C”:“是C lah”,“ D”:“是D”}]
更好地了解类型转换答案 2 :(得分:0)
不要使用JSON对象。只需使用对象
List<Object> records = new ArrayList<>();
Map<String, String> bean = new HashMap<>();
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);
System.out.println(JSONBody2);
输出为
[{"A":"is A","B":"is B lah","C":"is C lah","D":"is D"}]
如果您查看org.json.JSONObject的实现,则它内部包含一个名为map的变量,用于存储所有数据。这是构造函数
public JSONObject() {
this.map = new HashMap<String, Object>();
}
当GSON尝试转换为JSON时,它只是递归地查找对象并将所有变量都转换为JSON。因此,在这种情况下,它将转换内部映射,该内部映射将显示在Json输出中。
答案 3 :(得分:0)
虽然其他人已经回答了,但我想强调一个重要的学习。有两种方法可以将 JsonObject 转换为字符串。
一个是 new Gson().toJson(..)
,另一个是 JsonObject.toString()
。
虽然在很多情况下两者都会产生相同的结果但是如果 JsonObject 有一些包含有效 url 或 base64 编码值的字符串字段,第一种方法会将 &
和 =
转换为相应的 utf-8 代表会使您的 url 和 base64 编码值损坏的字符。但是,第二种方法保持这些值不变。