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

vmjh9lq9  于 2022-11-06  发布在  其他
关注(0)|答案(4)|浏览(161)

我正在尝试使用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 。(相同的代码和相同的库,只是新的重新创建的项目,但有这个问题)

rpppsulh

rpppsulh1#

尝试

String JSONBody2 = record.toString());

我会给予你[{“A”:“是A”,“B”:“是B拉”,“C”:“是C拉”,“D”:“是D”}]
你可以从这个链接得到更多更好的理解类型转换https://stackoverflow.com/a/27893392/4500099

uqdfh47h

uqdfh47h2#

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

tf7tbtn23#

虽然其他人已经回答了这个问题,但我想强调一个重要的学习。有两种方法可以将JsonObject转换为字符串。一种是new Gson().toJson(..),另一种是JsonObject.toString()
虽然这两种方法在很多情况下会产生相同的结果,但是如果JsonObject有一些字符串字段包含有效的url或base64编码值,第一种方法会将&=转换为相应的utf-8代表字符,这将使您的url和base64编码值损坏。然而,第二种方法会保持这些值不变。

2exbekwf

2exbekwf4#

不要使用JSON对象,只使用Object

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。

相关问题