JSON字符串无法转换为JSON数组

时间:2016-01-29 06:02:04

标签: android arrays json

这里我试图从json字符串构建一个数组,我从一个JSON文件中获取。我的问题是在将字符串转换为数组时。它没有转换。我查找了我的JSON文件交叉检查它但是它似乎是对的。但我是一个初学者,所以不知道是否有我遗漏的东西。因为这个我的应用程序崩溃了。 我的JSON文件是:

var Details=          [
            {
                    "Name" : "backtrack" ,
                    "Place" : "CS Software Lab",
                    "Floor" : "1st Floor",
                    "Building" : "Main College Building"
            }

            {
                    "Name" : "mechanist" ,
                    "Place" : "Mechanical Workshop",
                    "Floor" : "1st Floor",
                    "Building" : "Workshop Building"
            }
      ];

我的JSON解析器代码是这样的:

 public class JSONParser {

static InputStream iStream = null;
static JSONArray jarray = null;
static String json = "";

public JSONParser() {
}

public JSONArray getJSONFromUrl(String url) {

    StringBuilder builder = new StringBuilder();
    HttpClient client = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet(url);
    try {
        HttpResponse response = client.execute(httpGet);
        StatusLine statusLine = response.getStatusLine();
        int statusCode = statusLine.getStatusCode();
        //Log.d("Midhun", statusLine.toString());
        if (statusCode == 200) {
            HttpEntity entity = response.getEntity();
            InputStream content = entity.getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(content));
            String line;
            while ((line = reader.readLine()) != null) {
                builder.append(line);
                Log.d("Midhun",builder.toString());
            }
        } else {
            Log.e("==>", "Failed to download file");
        }
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    // Parse String to JSON object
    try {
        jarray = new JSONArray( builder.toString());
        Log.d("Midhun",jarray.toString());
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    // return JSON Object
    return jarray;

}


}

我做了什么

1.我在控制台中打印了我的line变量。结果没问题。

2.我在console中打印了我的builder变量。它给了我一个奇怪的输出:

我附上了3张照片:

enter image description here

enter image description here

enter image description here

我在这里做错了什么。请帮助我。

我的logcat:

    01-29 11:38:51.177 2126-3446/? E/JSON Parser: Error parsing data org.json.JSONException: Value var of type java.lang.String cannot be converted to JSONArray
    01-29 11:38:51.177 2126-3446/? W/dalvikvm: threadid=24: thread exiting with uncaught exception (group=0x41873e48)
   01-29 11:38:51.177 2126-3446/? E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
    01-29 11:38:51.177 2126-3446/? E/AndroidRuntime: Process: com.defcomdevs.invento16, PID: 2126
    01-29 11:38:51.177 2126-3446/? E/AndroidRuntime: java.lang.RuntimeException: An error occured while executing doInBackground()
    01-29 11:38:51.177 2126-3446/? E/AndroidRuntime:     at android.os.AsyncTask$3.done(AsyncTask.java:300)
    01-29 11:38:51.177 2126-3446/? E/AndroidRuntime:     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
    01-29 11:38:51.177 2126-3446/? E/AndroidRuntime:     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
   01-29 11:38:51.177 2126-3446/? E/AndroidRuntime:     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
   01-29 11:38:51.177 2126-3446/? E/AndroidRuntime:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
    01-29 11:38:51.177 2126-3446/? E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
  01-29 11:38:51.177 2126-3446/? E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   01-29 11:38:51.177 2126-3446/? E/AndroidRuntime:     at java.lang.Thread.run(Thread.java:841)
   01-29 11:38:51.177 2126-3446/? E/AndroidRuntime:  Caused by: java.lang.NullPointerException
   01-29 11:38:51.177 2126-3446/? E/AndroidRuntime:     at com.defcomdevs.invento16.Assistence$GetDetails.doInBackground(Assistence.java:72)
   01-29 11:38:51.177 2126-3446/? E/AndroidRuntime:     at com.defcomdevs.invento16.Assistence$GetDetails.doInBackground(Assistence.java:62)
    01-29 11:38:51.177 2126-3446/? E/AndroidRuntime:     at android.os.AsyncTask$2.call(AsyncTask.java:288)
  01-29 11:38:51.177 2126-3446/? E/AndroidRuntime:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)

3 个答案:

答案 0 :(得分:4)

您的JSON中存在两个语法错误

  1. “,”应该用于分隔JSON对象
  2. “;”您不必在末尾使用半冒号来标记JSON文件的结尾
  3. 有效的JSON是

    [{
            "Name": "backtrack",
            "Place": "CS Software Lab",
            "Floor": "1st Floor",
            "Building": "Main College Building"
        },
    
        {
            "Name": "mechanist",
            "Place": "Mechanical Workshop",
            "Floor": "1st Floor",
            "Building": "Workshop Building"
        }
    ]
    

    我建议您使用jsonlint.com来验证JSON文件的语法。

答案 1 :(得分:2)

您的JsonArray错了

你错过了,

试试这个

  [
            {
                    "Name" : "backtrack" ,
                    "Place" : "CS Software Lab",
                    "Floor" : "1st Floor",
                    "Building" : "Main College Building"
            }
             ,// missed , between two object
            {
                    "Name" : "mechanist" ,
                    "Place" : "Mechanical Workshop",
                    "Floor" : "1st Floor",
                    "Building" : "Workshop Building"
            }
      ]

Online JSON validator/Editor

答案 2 :(得分:0)

你的json无效

[
            {
                    "Name" : "backtrack" ,
                    "Place" : "CS Software Lab",
                    "Floor" : "1st Floor",
                    "Building" : "Main College Building"
            }
,// not present in your code
            {`enter code here`
                    "Name" : "mechanist" ,
                    "Place" : "Mechanical Workshop",
                    "Floor" : "1st Floor",
                    "Building" : "Workshop Building"
            }
      ]