Java JSONObject文本必须以';{';

Java JSONObject文本必须以';{';,java,json,Java,Json,我有一个JSONObject: { "gutter_url" : "", "sort_order" : "popularity", "result" : [ { "afs" : "Y", "release_year" : 1979, "album_sort" : "Wall, The" } ] } 想要得到“result”位置的数组, 所以我写了这段代码: JSONObject allCDs = new JSONObject(

我有一个JSONObject:

{
  "gutter_url" : "",
  "sort_order" : "popularity",
  "result" : [
    {
      "afs" : "Y",
      "release_year" : 1979,
      "album_sort" : "Wall, The"
    }
  ]
}
想要得到“result”位置的数组, 所以我写了这段代码:

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)
线程“main”org.json.JSONException中的异常:JSONObject文本必须在字符1处以“{”开头 位于org.json.JSONTokener.syntaxError(JSONTokener.java:410) 位于org.json.JSONObject(JSONObject.java:179) 位于org.json.JSONObject(JSONObject.java:402) 位于de.htwberlin.gim.Aufgabe8_5.getCoversFor(Aufgabe8_5.java:55) 位于de.htwberlin.gim.Aufgabe8_5.main(Aufgabe8_5.java:77)
这行末尾有两个逗号:

"sort_order" : "popularity",,
它可能应该是一个逗号:

"sort_order" : "popularity",

您可能正在使用前导空格将字符串传递给JSONObject。请尝试修剪

JSONObject allCDs = new JSONObject(objectString.replace(/^\s+/,""));
编辑:我以为这是javascript。试着用Java代码来修改它

JSONObject allCDs = new JSONObject(objectString.trim());
如果仍然不起作用,则显示字符串中的第一个字符是什么:

System.out.println((int)objectString.trim().charAt(0));
你应该期待123,大括号。事实上,检查整个内容

System.out.println((int)objectString);  // or
System.out.println((int)objectString.trim());
您还可以尝试在字符串中的{之前剪切所有内容

JSONObject allCDs = new JSONObject(objectString.substring(objectString.indexOf('{')));

示例1:从文件中读取文本

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();
        }
    }
}
示例2:

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);
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"}]
首先获取{的索引位置,然后读取json文本数据

输出:

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);
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"}]

找到了解决方案!我在用Java阅读批量APi时遇到了这个错误 因此,如果您处于相同的情况,那么只需添加以下行

con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Accept", "application/json");

你是对的,但实际上这个逗号错误只是因为我在stackoverflow上缩短了这个问题的JSONObject。原件完全正确并经过检查。你是对的,但实际上这个逗号错误只是因为我在stackoverflow上缩短了这个问题的JSONObject。原件完全正确并经过检查。JSONObject(objectString.replace(/^\s+/,“”);不工作:((.replace仅适用于chars变量objectString的类型和内容是什么?类型是一个字符串,其中包含来自此JSONObject的信息:@wong-很高兴提供帮助。我发现您是StackOverflow新手。欢迎!如果您愿意,您可以向上投票并接受答案(单击答案旁边的勾号).Thanks代码中的objectString是什么?