这里我试图从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张照片:
我在这里做错了什么。请帮助我。
我的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)
答案 0 :(得分:4)
您的JSON中存在两个语法错误
有效的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"
}
]
答案 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"
}
]