我正在尝试解析此股票信息:
http://www.google.com/finance/info?client=ig&q=csco
这是JSON格式的地图,基本上遵循本教程我看到使用quick-json jar但它不断给我一个例外,我无法弄清楚为什么。这是代码,非常感谢任何帮助
教程链接:https://code.google.com/p/quick-json/
public static void main(String args[]) throws IOException
{
String value="";
URL uri = new URL("http://www.google.com/finance/info?client=ig&q=csco");
BufferedReader input = new BufferedReader(new InputStreamReader(uri.openStream(), "UTF-8"));
while(input.readLine()!=null)
{
value+=input.readLine();
}
JsonParserFactory factory = JsonParserFactory.getInstance();
JSONParser parse = factory.newJsonParser();
Map jsonData =parse.parseJson(value);
System.out.println((String)jsonData.get("e"));
}
以下是我得到的例外情况:
Exception in thread "main" com.json.exceptions.JSONParsingException: @Key-Heirarchy::root[0]/ @Key:: COMMA or ] is expected. but found :...@Position::5
at com.json.utils.JSONUtility.handleFailure(JSONUtility.java:124)
at com.json.parsers.JSONParser.stringLiteralTemplate(JSONParser.java:574)
at com.json.parsers.JSONParser.nonValidatingValueTemplate(JSONParser.java:698)
at com.json.parsers.JSONParser.jsonArrayTemplate(JSONParser.java:454)
at com.json.parsers.JSONParser.parseJson(JSONParser.java:170)
at parser.Scratch.main(Scratch.java:27)
编辑:我也尝试过Map jsonData = parse.parseJson(value.substring(3)从[但它仍然给我一个错误
答案 0 :(得分:4)
除了删除前导//
修复你的循环外。变化
while(input.readLine()!=null) // skipping odd lines
{
value+=input.readLine(); // reading even lines
}
到
String line = null;
while((line = input.readLine()) !=null)
{
value +=line;
}
或者,更好地使用StringBuilder
之类的
String line = null;
StringBuilder json = new StringBuilder();
while((line = input.readLine()) !=null)
{
json.append(line);
}
value = json.substring(3); // removes the leading "// "
修改强>:
我不熟悉你的JSON解析器。使用org.json. Java解析器,您可以这样做。
JSONArray jsonRoot = new JSONArray(value);
JSONObject quote = jsonRoot.get(0);
System.out.println ("e = " + quote.getString("e"));
但是,作为一种解决方法,您可以将[]
从StringBuilder
剥离为
// removes the leading "// [" and trailing "]"
value = json.substring(4, json.length() - 1);
答案 1 :(得分:1)
这个json不是有效的,有两个“//”。
使用http://jsonlint.com/验证此
答案 2 :(得分:1)
来自该网址的响应以//
开头,这是无效的JSON:
// [{“id”:“99624”,“t”:“CSCO”,“e”:“NASDAQ”,“l”:“24.00”,“l_cur”:“24.00”,“s” :“2”,“ltt”:“美国东部时间下午4:00”,“LT”:“美国东部时间6月25日下午4:00”,“c”:“ - 0.05”,“cp”:“ - 0.21”,“ccol “:”chr“,”el“:”24.00“,”el_cur“:”24.00“,”elt“:”美国东部时间6月25日下午5:54“,”ec“:”0.00“,”ecp“:”0.00 “,”eccol“:”chb“,”div“:”0.17“,”yld“:”2.83“}]
答案 3 :(得分:1)
以下博客在quick-json解析器上有足够多的非常好的例子
它还有其他竞争解析器示例
http://codesnippets4all.com/html/parsers/json/quick-json.htm
答案 4 :(得分:0)
将此添加到您的代码中:
String line = null;
while((line = input.readLine()) !=null)
{
value += line;
}
value = value.replace("// ", "");
您需要先将//
替换为“清理”JSON,然后才能解析它。
答案 5 :(得分:-1)
看来你正在使用旧的quick-json解析器版本。使用最新版本进行解析
快速JSON-1.0.2.3.jar
我可以看到json如下所示,
// [
{
"id": "99624"
,"t" : "CSCO"
,"e" : "NASDAQ"
,"l" : "25.41"
,"l_cur" : "25.41"
,"s": "2"
,"ltt":"3:59PM EDT"
,"lt" : "Jul 10, 3:59PM EDT"
,"c" : "+0.25"
,"cp" : "1.01"
,"ccol" : "chg"
,"el": "25.55"
,"el_cur": "25.55"
,"elt" : "Jul 10, 7:07PM EDT"
,"ec" : "+0.14"
,"ecp" : "0.55"
,"eccol" : "chg"
,"div" : "0.17"
,"yld" : "2.68"
}
]
这不是有效的JSON,它不应该以{{1}}
开头//
删除// [
,只需使用//
直到json字符串结尾
我能够在没有[
//
以下是版本 quick-json-1.0.2.3.jar
的输出[
{
"id": "99624"
,"t" : "CSCO"
,"e" : "NASDAQ"
,"l" : "25.41"
,"l_cur" : "25.41"
,"s": "2"
,"ltt":"3:59PM EDT"
,"lt" : "Jul 10, 3:59PM EDT"
,"c" : "+0.25"
,"cp" : "1.01"
,"ccol" : "chg"
,"el": "25.55"
,"el_cur": "25.55"
,"elt" : "Jul 10, 7:07PM EDT"
,"ec" : "+0.14"
,"ecp" : "0.55"
,"eccol" : "chg"
,"div" : "0.17"
,"yld" : "2.68"
}
]