Спроба розібрати JSON в String в Java

Я намагаюся проаналізувати цю інформацію про акції за адресою:

http://www.google.com/finance/info?client=ig&q=csco

це в форматі JSON на карту, по суті слідуючи цьому підручнику, я побачив, що використовую jar jar, але це дає мені виняток, і я не можу зрозуміти чому. Ось код, будь-яка допомога дуже вдячна

Tutorial link: 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 :[email protected]::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)

EDIT: Я також спробував карту jsonData = parse.parseJson (value.substring (3), щоб почати в [but it still gives me a error

3
Ви видаєте виняток, що частина входу не має очікуваного роздільника.
додано Автор wazy, джерело
Ви видаєте виняток, що частина входу не має очікуваного роздільника.
додано Автор wazy, джерело
// тут неможливо parsable
додано Автор Jigar Joshi, джерело
// тут неможливо parsable
додано Автор Jigar Joshi, джерело
// тут неможливо parsable
додано Автор Jigar Joshi, джерело
Використовуйте один з декількох веб-сторінок аналізатора онлайн JSON ", які ви можете знайти в Google для перевірки вашої JSON .
додано Автор Hot Licks, джерело
Використовуйте один з декількох веб-сторінок аналізатора онлайн JSON ", які ви можете знайти в Google для перевірки вашої JSON .
додано Автор Hot Licks, джерело
Використовуйте один з декількох веб-сторінок аналізатора онлайн JSON ", які ви можете знайти в Google для перевірки вашої JSON .
додано Автор Hot Licks, джерело
Схоже, ви додасте 1 рядок через кожну 2 readLine() усередині "значення" під час циклу while.
додано Автор Raphaël, джерело
Схоже, ви додасте 1 рядок через кожну 2 readLine() усередині "значення" під час циклу while.
додано Автор Raphaël, джерело
Схоже, ви додасте 1 рядок через кожну 2 readLine() усередині "значення" під час циклу while.
додано Автор Raphaël, джерело
так, але це в правильному форматі з того, що я можу сказати, тому я не знаю, чому це говорить, що це не так
додано Автор user2494770, джерело

9 Відповіді

На додаток до видалення провідного // також виправте свій цикл. Змінити

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 "// "

EDIT:
I'm not familiar with your JSON parser. With the org.json. Java parser you could do it this way.

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);
4
додано
Перевірте моє оновлення.
додано Автор Ravi Thapliyal, джерело
Пропускання ліній із вводу не є проблемою?
додано Автор Ravi Thapliyal, джерело
Так, проблема полягає в тому, що ваша карта {} перебуває в масиві JSON []. Вам може знадобитися вивчити API ще дещо, щоб отримати два рівня в вашому json.
додано Автор Ravi Thapliyal, джерело
Який аналізатор JSON ви використовуєте?
додано Автор Ravi Thapliyal, джерело
Вибачте, я повністю подивився на це, дякую, що вказав на це, не можу повірити, що я все одно роблю цю помилку зараз і далі. Він працює зараз, але він повертає нуль. Отже, це не розбір правильно, будь-які пропозиції
додано Автор user2494770, джерело
швидкий джонс Відповідно до налагоджувача, все ставиться в "root". Я забув якесь основне правило хеш-таблиць?
додано Автор user2494770, джерело
Спасибі, підручник просто зробив це таким чином, тому я зрозумів, що це повинно бути добре. Я продовжу шукати Ще раз спасибі за допомогу!
додано Автор user2494770, джерело

Відповідь від цієї URL-адреси починається з //, що не є дійсним JSON:

//[{"id": "99624", "t": "CSCO", "e": "NASDAQ", "l": "24.00", "l_cur": "24.00", "s" : "2", "ltt": "4:00 вечора EDT", "lt": "25 червня, 4:00 вечора EDT", "c": "-0,05", "cp": "-0,21", "ccol ":" chr "," el ":" 24.00 "," el_cur ":" 24.00 "," elt ":" 25 червня, 5:54 вечора EDT "," ec ":" 0.00 "," ecp ":" 0.00 "," eccol ":" chb "," div ":" 0.17 "," yld ":" 2.83 "}]

Відповідно до це та < a href = "https://developers.google.com/finance/" rel = "nofollow"> цей , API Google Finance у будь-якому випадку не підтримується, тому ви можете знайти щось інше.

1
додано
@sreya Який виняток?
додано Автор Brendan Long, джерело
@sreya Яка помилка?
додано Автор Brendan Long, джерело
той же: Виняток у потоці "main" com.json.exctions.JSONParsingException: "@" Key-Heirarchy :: root [0]/"@" Key :: COMMA або] очікується. але знайдено: ... @ Посада :: 6
додано Автор user2494770, джерело
Вибачте, це виключення
додано Автор user2494770, джерело
По правді, я також спробував це з значенням. substring (3), щоб запустити його на "[", але це як і раніше дає мені помилку
додано Автор user2494770, джерело

Відповідь від цієї URL-адреси починається з //, що не є дійсним JSON:

//[{"id": "99624", "t": "CSCO", "e": "NASDAQ", "l": "24.00", "l_cur": "24.00", "s" : "2", "ltt": "4:00 вечора EDT", "lt": "25 червня, 4:00 вечора EDT", "c": "-0,05", "cp": "-0,21", "ccol ":" chr "," el ":" 24.00 "," el_cur ":" 24.00 "," elt ":" 25 червня, 5:54 вечора EDT "," ec ":" 0.00 "," ecp ":" 0.00 "," eccol ":" chb "," div ":" 0.17 "," yld ":" 2.83 "}]

Відповідно до це та < a href = "https://developers.google.com/finance/" rel = "nofollow"> цей , API Google Finance у будь-якому випадку не підтримується, тому ви можете знайти щось інше.

1
додано
@sreya Який виняток?
додано Автор Brendan Long, джерело
@sreya Яка помилка?
додано Автор Brendan Long, джерело
Вибачте, це виключення
додано Автор user2494770, джерело
той же: Виняток у потоці "main" com.json.exctions.JSONParsingException: "@" Key-Heirarchy :: root [0]/"@" Key :: COMMA або] очікується. але знайдено: ... @ Посада :: 6
додано Автор user2494770, джерело
По правді, я також спробував це з значенням. substring (3), щоб запустити його на "[", але це як і раніше дає мені помилку
додано Автор user2494770, джерело

Цей json не дійсний, має два "//".

Використовуйте http://jsonlint.com/ для підтвердження цього

1
додано

Цей json не дійсний, має два "//".

Використовуйте http://jsonlint.com/ для підтвердження цього

1
додано

Цей json не дійсний, має два "//".

Використовуйте http://jsonlint.com/ для підтвердження цього

1
додано

Схоже, ви використовуєте стару версію аналізатора quick-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"
}
]

This is not valid JSON, it should not be preceded by //

// [

видаліть // і просто використовуйте з [ до кінця рядка json

i was able to parse successfully the below json string without //

[
{
"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"
}
]

Below is the output i've got with version 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}]}
1
додано

Наступний блог має достатню кількість дуже хороших прикладів для аналізатора quick-json

Він має й інші приклади конкурентних парсерів

http://codesnippets4all.com/html/parsers/json/quick-json.htm

1
додано
Гарне джерело. Спробуйте додати відповідний приклад у свою відповідь тут.
додано Автор MissingNumber, джерело

Додайте це до свого коду:

    String line = null;
    while((line = input.readLine()) !=null)
    {
        value += line;
    }
    value = value.replace("// ", "");

Вам спочатку потрібно замінити //, щоб очистити JSON, перш ніж ви зможете проаналізувати його.

0
додано
@ Брендан давно, я з вами згоден. Просто закодовано це для конкретного питання. Я хотів би це відредагувати, але зараз я перебуваю на мобільному пристрої.
додано Автор wazy, джерело
@brendan довго, якщо ви перевіряєте вхід, єдиний випадок на початку, і я досить позитивний, це не відбудеться знову.
додано Автор wazy, джерело
Видалення всіх // на вході не є гарною ідеєю.
додано Автор Brendan Long, джерело
Якщо ви розглядаєте конкретний випадок введення, то він здається безпечним, але він все ще переборюється і без необхідності збільшує ризик виникнення помилок. та будуть більш безпечними: if (value.startswith ("//")) value = value.substr (2); .
додано Автор Brendan Long, джерело
ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram

ІТ КПІ - Java
ІТ КПІ - Java
436 учасників