Текст JSONObject должен начинаться с '{' - PullRequest
12 голосов
/ 23 января 2011

У меня есть этот JSONObject:

{
  "gutter_url" : "",
  "sort_order" : "popularity",
  "result" : [
    {
      "afs" : "Y",
      "release_year" : 1979,
      "album_sort" : "Wall, The"
    }
  ]
}

и хотите получить массив в позиции «результат», поэтому я написал этот код:

JSONObject allCDs = new JSONObject(objectString);
JSONArray CD_List = allCDs.getJSONArray("result");

Но тогда я получаю это исключение:

Exception in thread "main" org.json.JSONException: A JSONObject text must begin with '{' at character 1
 at org.json.JSONTokener.syntaxError(JSONTokener.java:410)
 at org.json.JSONObject.<init>(JSONObject.java:179)
 at org.json.JSONObject.<init>(JSONObject.java:402)
 at de.htwberlin.gim.Aufgabe8_5.getCoversFor(Aufgabe8_5.java:55)
 at de.htwberlin.gim.Aufgabe8_5.main(Aufgabe8_5.java:77)

Ответы [ 4 ]

15 голосов
/ 23 января 2011

Возможно, вы передаете STRING в JSONObject с начальными пробелами.Попробуйте обрезать

JSONObject allCDs = new JSONObject(objectString.replace(/^\s+/,""));

РЕДАКТИРОВАТЬ: Я думал, что это был JavaScript.Попробуйте обрезать его, используя вместо этого Java-код

JSONObject allCDs = new JSONObject(objectString.trim());

Если это по-прежнему не работает, то покажите, какой первый символ в строке:фигурные скобки.Фактически, проверьте весь контент

System.out.println((int)objectString);  // or
System.out.println((int)objectString.trim());

Вы также можете попробовать вырезать все до {в строке

JSONObject allCDs = new JSONObject(objectString.substring(objectString.indexOf('{')));
1 голос
/ 19 марта 2019

Нашли решение! Я получил эту ошибку, когда читал Bulk APi на Java поэтому, если вы находитесь в такой же ситуации, просто добавьте следующие строки.

con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Accept", "application/json");
1 голос
/ 23 января 2011

У вас есть две запятые в конце этой строки:

"sort_order" : "popularity",,

Вероятно, это одна запятая:

"sort_order" : "popularity",
0 голосов
/ 18 сентября 2018

Пример 1: Считать текст Json из файла.

package com.json.example;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.commons.io.IOUtils;
import org.json.JSONObject;

public class GetArrayObjectFromJsonText {
    public static void main(String[] args) {
        String jsonText;
        try {
            jsonText = IOUtils.toString(new FileInputStream(new File("C:\\Users\\udaykiranp\\Downloads\\Json.txt")));
            int i = jsonText.indexOf("{");
            jsonText = jsonText.substring(i);
            JSONObject jsonFile = new JSONObject(jsonText);
            System.out.println("Input JSON data: "+ jsonFile.toString());
            Object result = jsonFile.get("result");
            System.out.println("Result array Data: "+ result);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Example2:

String jsonText = "\"{\"gutter_url\":\"\", \"result\":[{\"album_sort\":\"Wall, The\",\"release_year\":1979,\"afs\":\"Y\"}],\"sort_order\":\"popularity\"}\"";
int i = jsonText.indexOf("{");
jsonText = jsonText.substring(i);
JSONObject jsonFile = new JSONObject(jsonText);
System.out.println("Input JSON data: "+ jsonFile.toString());
Object result = jsonFile.get("result");
System.out.println("Result array Data: "+ result);

Сначала получите позицию индекса { , затем прочитайте текстовые данные json .

Выход:

Input JSON data: {"gutter_url":"","result":[{"album_sort":"Wall, The","release_year":1979,"afs":"Y"}],"sort_order":"popularity"}
Result array Data: [{"album_sort":"Wall, The","release_year":1979,"afs":"Y"}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...