繁体   English   中英

无法将 HashSet 解析为 JSONObject 字符串

[英]Can't parse HashSet to JSONObject String

我正在尝试将HashSet<String>转换为JSONObject ,然后解析输出 JSON。

这是我尝试过的:

JSONObject json = new JSONObject();
json.put("set", new HashSet<>(Arrays.asList("a", "b")));
json.put("list", Arrays.asList("a", "b"));
String jsonString = json.toJSONString();

System.out.println(jsonString);

JSONParser parser = new JSONParser();
JSONObject afterParse = (JSONObject) parser.parse(jsonString);
System.out.println(afterParse.toJSONString());

但它给了我这个输出和错误:

{"set":[b, a],"list":["a","b"]}
Exception in thread "main" Unexpected character (b) at position 8.

在这里,您可以看到 a 和 b 都是字符串,在列表中都在双引号内,但在集合中不是。

我正在使用org.json.simple v1.1。

我认为这是org.json.simple库的问题。

我使用了org.json库,并且必须在上面的代码中做一些小的改动才能工作:

JSONObject json = new JSONObject();
json.put("set", new HashSet<>(Arrays.asList("a", "b")));
json.put("list", Arrays.asList("a", "b"));
String jsonString = json.toString();

System.out.println(jsonString);

JSONObject afterParse = new JSONObject(jsonString);
System.out.println(afterParse.toString());

这段代码的输出是:

{"set":["a","b"],"list":["a","b"]}

当你将一个字符串数组转换为列表,然后将列表转换为一个集合时,它不再是字符串,而是一个对象数组,因此 new HashSet<>(Arrays.asList("a", "b"))); 给出 "set":[b, a] (不带引号)。 和 parser.parse(jsonString); 适用于对象而不是对象数组。

尝试使用列表而不是如下集合:

json.put("set", new Arraylist<>(new HashSet<>(Arrays.asList("a", "b"))));

替代解决方案是使用 com.fasterxml.jackson.databind.ObjectMapper

   String str = "str1";
   String str2 = "str2";
   String str4 = "str3";

   Set<String> setObject= new HashSet();
   setObject.add(str);
   setObject.add(str2);
   setObject.add(str4);

   ObjectMapper mapperObj = new ObjectMapper();
   String JSON = mapperObj.writeValueAsString(setObject);

你可以试试这种方式,这里 HashSet 转换为 JsonArray,现在这个数组使用任何键放入 JSONObject 参考下面的代码杯。

Set<String> set = new HashSet<>();
set.add("A");
set.add("B");
set.add("C");
set.add("D");

// Conver to JSONArray
JSONArray jsonArray = new JSONArray(set.toArray());

// JSONArray to JSONObject with Key
JSONObject jsonObject = new JSONObject();
jsonObject.put("List", jsonArray);

System.out.println(jsonObject.toString());

// Output:
// {"List":["A","B","C","D"]}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM