我尝试使用gson解析一个json对象,如下所示:
第一、第二、第三、第四
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
我不认为这和它是从一个 "
,正如他们在这个问题上所说的,自从我去掉第一个和最后一个引号后,我就得到了错误 Expected name at line 2 column 3
我的完整代码在我的github页面上,非常简短。
我基本上是想扭转这个过程。这是一个相关的问题。
更新
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);
3条答案
按热度按时间zbq4xfa01#
你已经逃过了所有的危险
"
字符并将整个json用引号括起来,就好像这是一个String
代码中的常量(可能在某个点上存在)。但是你的JsonMapFileExample
正在从磁盘上的文件读取这个json—没有理由在专用的json文件中转义引号。尝试移除外部
"
人物与角色\
在每个键和值周围转义。您还可以将json直接粘贴到任意数量的在线json验证器中进行双重检查。文件的内容应该是有效的json;你贴的不是。rnmwe5a22#
根据您面临的错误,您需要删除
"
以便gson正确地解析它。例如,对于json字符串,更正后的字符串为:
dly7yett3#
试试这个
输出:
从更新中,我了解到您试图从文件中读取json。我有从文件中读取json的版本。检查一下。
我的json示例文件: