我正在尝试将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。
答案 0 :(得分:1)
当你将一个字符串数组转换为列表然后将列表转换为一个Set时,它不再是String,而是一个对象数组,因此新的HashSet&lt;&gt;(Arrays.asList(&#34; a&#34; ,&#34; b&#34;)));给出&#34;设置&#34;:[b,a](不带引号)。和parser.parse(jsonString);适用于对象而不是对象数组。
尝试使用列表而不是如下所示的设置:
json.put("set", new Arraylist<>(new HashSet<>(Arrays.asList("a", "b"))));
答案 1 :(得分: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"]}
答案 2 :(得分:0)
替代解决方案是使用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);
答案 3 :(得分:0)
您可以尝试这种方式,在这里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"]}