提问者:小点点

使用gson issue将jsonobject转换为字符串


我正在尝试使用GSON库将JsonObject转换为String。但是结果输出会多一层父“map”包裹json。请告诉我我做错了什么,为什么会出现父“Map”层?

我什至尝试使用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.但是我不知道为什么“地图”出现在这里。因为以前它在没有父“地图”包装的情况下工作。(相同的代码和相同的库只是新的重新创建项目,但有这个问题)


共3个答案

匿名用户

尝试

  String JSONBody2 = record.toString());

会给你[{"A":"is A","B":"is B lah","C":"is C lah","D":"is D"}]

您可以从这个链接中更好地了解类型转换https://stackoverflow.com/a/27893392/4500099

匿名用户

虽然其他人已经回答了,但我想强调一个重要的学习。有两种方法可以将JsonObject转换为字符串。一种是new Gson(). toJson(…),另一种是JsonObject.toString()

虽然两者在许多情况下都会产生相同的结果,但如果JsonObject有一些包含有效url或base64编码值的字符串字段,第一个方法将转换

匿名用户

使用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);