String json = "{'name': 'Tom','array':[{'a':'111','b':'222','c':'333'},{},{'a':'999'}],'address':'York'}";
try {
JSONObject jsonObject = JSONObject.fromObject(json);
String name = jsonObject.getString("name");
String address = jsonObject.getString("address");
System.out.println("name is:" + name);
System.out.println("address is:" + address);
JSONArray jsonArray = jsonObject.getJSONArray("array");
for (int i = 0; i < jsonArray.size(); i++) {
System.out.println("item " + i + " :" + jsonArray.getString(i));
}
} catch (JSONException e) {
e.printStackTrace();
}
一切都好。
但是当我将{'name': 'Tom','array':[{'a':'111','b':'222','c':'333'},{},{'a':'999'}],'address':'York'}
放入文件时。
File file = new File(fileName);
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
String tempString = null;
while ((tempString = reader.readLine()) != null){
JSONObject jo = JSONObject.fromObject(tempString.trim());
String id = jo.getString("id");
String name = jo.getString("name");
log.info(id + ":" + name);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
它告诉我Exception in thread "main" net.sf.json.JSONException: A JSONObject text must begin with '{' at character 1 of "{'name': 'Tom','array':[{'a':'111','b':'222','c':'333'},{},{'a':'999'}],'address':'York'}
。这段代码有什么问题?有什么可以解决的吗?感谢。
我的档案:
{'name': 'Tom','array':[{'a':'111','b':'222','c':'333'},{},{'a':'999'}],'address':'York'}
答案 0 :(得分:2)
来自评论:
我用
InputStreamReader isr = new InputStreamReader(new FileInputStream(fileName), "UTF-8"); reader = new BufferedReader(isr); String tempString = null; while ((tempString = reader.readLine()) != null){
,我的文件以
EE BB BF
开头,我查了一下。
问题是该文件以BOM开头。 JSON解码器期望文件以一个可以启动JSON类型的字符开头,但它正在获得U + FEFF。
如果JSON文件没有以BOM开头,那将是最好的。
如果你必须处理这种情况,那么你可以使用缓冲区:
BufferedReader buf = new BufferedReader(isr);
// remove BOM
buf.mark(1);
if(buf.read() != '\uFEFF') {
buf.reset();
}
// continue...
答案 1 :(得分:0)
如果查看错误" {'name': 'Tom','array':[{'a':'111','b':'222','c':'333'},{},{'a':'999'}],'address':'York'}"
中返回的字符串,您会在字符1中看到实际存在空格。如果您尝试从文件中删除此空间会发生什么?
答案 2 :(得分:0)
您必须使用双引号'
替换单引号"
。
{
"name": "Tom",
"array": [
{
"a": "111",
"b": "222",
"c": "333"
},
{
},
{
"a": "999"
}
],
"address": "York"
}
根据JSON规范http://www.ietf.org/rfc/rfc4627.txt
中的定义字符串的表示类似于C中使用的约定 编程语言家族。字符串的开头和结尾 引号。
quotation mark
表示"