我无法解析json数组。当我尝试获得“不是原始数组错误。 你能帮我找到我的错误吗?
我一直在寻找解决方案,但是找不到解决方案。
这是我的代码:
public void tableInit() throws JSONException {
Log.e("TableInit()", "Start!");
Log.e("TableInit()", ""+jsonObjectToTable);
float textSize = 18.0f;
TableLayout stk = (TableLayout) findViewById(R.id.table_main);
TableRow tbrow0 = new TableRow(this);
TextView tv0 = new TextView(this);
tv0.setText(" ID ");
tv0.setTypeface(null, Typeface.BOLD); //fett
tv0.setTextSize(textSize);
tbrow0.addView(tv0);
[...]
stk.addView(tbrow0);
JSONArray jsonArray = new JSONArray(jsonObjectToTable);
for(int i = 0; i < jsonArray.length(); ++i)
{
// Extract values from JSON row:
JSONObject jsonObject = jsonArray.getJSONObject(i);
Log.e("JsonObject", ""+jsonObject);
String id = jsonObject.has("id") ? jsonObject.getString("id") : "";
String name = jsonObject.has("name") ? jsonObject.getString("name") : "";
String home = jsonObject.has("home") ? jsonObject.getString("home") : "";
String wetsuit = jsonObject.has("wetsuit") ? jsonObject.getString("wetsuit") : "";
String board = jsonObject.has("board") ? jsonObject.getString("board") : "";
String rig = jsonObject.has("rig") ? jsonObject.getString("rig") : "";
String harness = jsonObject.has("harness") ? jsonObject.getString("harness") : "";
String rent_until = jsonObject.has("rent_until") ? jsonObject.getString("rent_until") : "";
String renting_date = jsonObject.has("renting_date") ? jsonObject.getString("renting_date") : "";
TableRow tbrow = new TableRow(this);
TextView textViewId = new TextView(this);
textViewId.setText(id);
textViewId.setGravity(Gravity.CENTER);
tbrow.addView(textViewId);
[...]
}
}
这是创建的jsonObjectToTable:
@Override
protected String doInBackground(String... strings) {
Log.e("Async", "Async starts!");
try {
response = RequestHandler.sendGet("http://192.168.122.1/php/renting_private_select.php");
return response;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
protected void onPostExecute(String s) {
try {
JSONObject tableJson = new JSONObject(s);
jsonObjectToTable = tableJson;
tableInit();
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
我得到以下日志:
E / TableInit():开始! E / TableInit():{“ equipment_private”: [{{id“:” 1“,” name“:” Name“,” home“:” Unterkunft“,” wetsuit“:” Anzug“,” board“:” Board“,” rig“:” Segel“, “ harness”:“ Trapetz”,“ renting_date”:“ 23.01.19”,“ rent_until”:“ 23.12.19”},{“ id”:“ 2”,“ name”:“ Name”,“ home”: “ Unterkunft”,“潜水衣”:“ Anzug”,“板”:“板”,“钻机”:“ Segel”,“线束”:“ Trapetz2”,“ renting_date”:“”,“ rent_until”:“”} ]} W / System.err:org.json.JSONException:不是原始数组:类org.json.JSONObject W / System.err:位于org.json.JSONArray。(JSONArray.java:116) 在com.example.surftest.MainActivity.tableInit(MainActivity.java:135) W / System.err:位于com.example.surftest.MainActivity $ RequestSelectAsync.onPostExecute(MainActivity.java:234) 在com.example.surftest.MainActivity $ RequestSelectAsync.onPostExecute(MainActivity.java:213) 在android.os.AsyncTask.finish(AsyncTask.java:695) 在android.os.AsyncTask.access $ 600(AsyncTask.java:180) 在android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:712) W / System.err:位于android.os.Handler.dispatchMessage(Handler.java:106) 在android.os.Looper.loop(Looper.java:193) 在android.app.ActivityThread.main(ActivityThread.java:6669) 在java.lang.reflect.Method.invoke(本机方法) W / System.err:位于com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:493) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
答案 0 :(得分:0)
您的整体解析方式不太正确。
出于这种目的,我建议像GSON这样的东西。
首先使用它创建两个模型类。
class Response{
@SerializedName("equipment_private")
public List<Equipment> equipmentPrivate
}
class Equipment {
public String id;
public String name;
public String home;
public String wetsuit;
public String board;
public String rig;
public String harness;
@SerializedName("renting_date")
public String rentingDate;
@SerializedName("rent_until")
public String rentUntil;
}
然后,您可以做类似
的操作 Gson gson = new Gson();
Response response = gson.fromJson(json_string, Response.class);
由于我没有在IDE中进行检查,因此可能需要一些额外的工作,但我想您会理解的。希望对您有所帮助。
答案 1 :(得分:0)
您做错了什么是创建json数组的对象并传递json对象本身,而在json响应中,json数组被嵌入与键“ equipment_private”相关的json对象中。
错误的方式:
JSONArray jsonArray = new JSONArray(jsonObjectToTable);
正确方法:
JSONArray jsonArray = jsonObjectToTable.getJSONArray("equipment_private")
希望您能理解,并且可以解决您的问题。
答案 2 :(得分:0)
这是因为要获取的表本身就是对象。看看这个。您只需要多一行即可完成代码:
这是您的输入内容
{
"equipment_private": [{
"id": "1",
"name": "Name",
"home": "Unterkunft",
"wetsuit": "Anzug",
"board": "Board",
"rig": "Segel",
"harness": "Trapetz",
"renting_date": "23.01.19",
"rent_until": "23.12.19"
}, {
"id": "2",
"name": "Name",
"home": "Unterkunft",
"wetsuit": "Anzug",
"board": "Board",
"rig": "Segel",
"harness": "Trapetz2",
"renting_date": "",
"rent_until": ""
}]
}
因此,您应该按如下方式进行解析:
JSONObject object = new JSONObject(jsonObjectToTable); // You do need this line
try {
object.get("equipment_private");
JSONArray jsonArray = new JSONArray(object);
for (int i = 0; i < jsonArray.length(); ++i) {
// Extract values from JSON row:
JSONObject jsonObject = jsonArray.getJSONObject(i);
Log.e("JsonObject", "" + jsonObject);
String id = jsonObject.has("id") ? jsonObject.getString("id") : "";
String name = jsonObject.has("name") ? jsonObject.getString("name") : "";
String home = jsonObject.has("home") ? jsonObject.getString("home") : "";
String wetsuit = jsonObject.has("wetsuit") ? jsonObject.getString("wetsuit") : "";
String board = jsonObject.has("board") ? jsonObject.getString("board") : "";
String rig = jsonObject.has("rig") ? jsonObject.getString("rig") : "";
String harness = jsonObject.has("harness") ? jsonObject.getString("harness") : "";
String rent_until = jsonObject.has("rent_until") ? jsonObject.getString("rent_until") : "";
String renting_date = jsonObject.has("renting_date") ? jsonObject.getString("renting_date") : "";
TableRow tbrow = new TableRow(this);
TextView textViewId = new TextView(this);
textViewId.setText(id);
textViewId.setGravity(Gravity.CENTER);
tbrow.addView(textViewId);
[...]
}
} catch (JSONException e) {
e.printStackTrace();
}
现在,让我知道您是否遇到任何错误
此外,您可以通过创建代表您的Json对象的类来解决问题,然后使用GSON转换器解析它而无需编写任何这些代码。您可以在此线程How to parse json parsing Using GSON in android
中找到示例解决方案