【发布时间】:2015-04-28 05:08:50
【问题描述】:
我正在尝试像这样使用 gson 解析 JSON 对象:
1st,2nd,3rd,4th
Gson gson=new Gson();
Map<String, HashSet<String>> map = new HashMap<String, HashSet<String>>();
map = (Map<String, HashSet<String>>) gson.fromJson(jsonTxt, map.getClass());
这就是 JSON 的样子:
"{
\"Rao\":[\"Q7293658\",\"\",\"Q7293657\",\"Q12953055\",\"Q3531237\",\"Q4178159\",\"Q1138810\",\"Q579515\",\"Q3365064\",\"Q7293664\",\"Q1133815\"],
\"Hani Durzy\":[\"\"],
\"Louise\":[\"\",\"Q1660645\",\"Q130413\",\"Q3215140\",\"Q152779\",\"Q233203\",\"Q7871343\",\"Q232402\",\"Q82547\",\"Q286488\",\"Q156723\",\"Q3263649\",\"Q456386\",\"Q233192\",\"Q14714149\",\"Q12125864\",\"Q57669\",\"Q168667\",\"Q141410\",\"Q166028\"],
\"Reyna\":[\"Q7573462\",\"Q2892895\",\"Q363257\",\"Q151944\",\"Q3740321\",\"Q2857439\",\"Q1453358\",\"Q7319529\",\"Q733716\",\"Q16151941\",\"Q7159448\",\"Q5484172\",\"Q6074271\",\"Q1753185\",\"Q7319532\",\"Q5171205\",\"Q3183869\",\"Q1818527\",\"Q251862\",\"Q3840414\",\"Q5271282\",\"Q5606181\"]
}"
我不断收到错误:
Expected BEGIN_OBJECT but was STRING at line 1 column 2
我认为这与它以" 开头的事实没有任何关系,正如他们在this question 中所建议的那样,因为当我删除第一个和最后一个引号时,我得到了错误Expected name at line 2 column 3
我的完整代码是here on my github page,它很短。
我实际上是在尝试反转this procedure。 This 是一个相关问题。
更新
File f = new File("/home/matthias/Workbench/SUTD/nytimes_corpus/wdtk-parent/wdtk-examples/JSON_Output/user.json");
String jsonTxt = null;
if (f.exists())
{
InputStream is = new FileInputStream("/home/matthias/Workbench/SUTD/nytimes_corpus/wdtk-parent/wdtk-examples/JSON_Output/user.json");
jsonTxt = IOUtils.toString(is);
}
Gson json = new Gson();
Map<String, HashSet<String>> map = new HashMap<String, HashSet<String>>();
map = (Map<String, HashSet<String>>) json.fromJson(jsonTxt, map.getClass());
System.out.println(map);
【问题讨论】:
-
浏览我的答案。
-
我知道你找到了解决方案。但可以尝试我的从文件中读取 JSON 的版本。
-
@OO7 我在我古怪的转义 JSON 上尝试了它,我得到了错误
com.google.gson.JsonPrimitive cannot be cast to com.google.gson.JsonObject,当我在普通 JSON 上尝试它时(在我删除转义和外部引号之后)它可以工作,但是那只是将其作为字符串读入吗?我想以Map<String, HashSet<String>>的形式加入 -
@OO7 但是您在文件中读取的方式比我聪明得多,我采用了您的那部分代码。