3

この株式情報を解析しようとしています:

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) を [ で開始しようとしましたが、それでもエラーが発生します

4

6 に答える 6

1

この json は有効ではありません。「//」が 2 つ含まれています。

http://jsonlint.com/を使用してこれを検証します

于 2013-06-25T22:21:06.150 に答える
1

その URL からの応答は//、有効な JSON ではない で始まります。

// [ { "id": "99624" ,"t" : "CSCO" ,"e" : "NASDAQ" ,"l" : "24.00" ,"l_cur" : "24.00" ,"s": "2 " ,"ltt":"4:00PM EDT" ,"lt" : "6 月 25 日 4:00PM EDT" ,"c" : "-0.05" ,"cp" : "-0.21" ,"ccol" : " chr" ,"el": "24.00" ,"el_cur": "24.00" ,"elt" : "Jun 25, 5:54PM EDT" ,"ec" : "0.00" ,"ecp" : "0.00" ," eccol" : "chb" ,"div" : "0.17" ,"yld" : "2.83" } ]

thisおよびthisによると、とにかく Google Finance API は廃止されているため、何か他のものを見つけたいと思うかもしれません。

于 2013-06-25T22:21:27.600 に答える
-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 ではありません。//

// [

削除して、json文字列の最後まで//使用するだけです[

以下の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"
}
]

以下は、バージョンquick-json-1.0.2.3.jarで得た出力です

{root=[{e=NASDAQ, c=+0.25, div=0.17, l=25.41, lt=Jul 10, 3:59PM EDT, ec=+0.14, ltt=3:59PM EDT, elt=Jul 10, 7:07PM EDT, id=99624, yld=2.68, el_cur=25.55, t=CSCO, cp=1.01, s=2, el=25.55, l_cur=25.41, eccol=chg, ccol=chg, ecp=0.55}]}
于 2013-07-11T03:34:28.817 に答える