Android JSON解析错误无法转换为JSONArray

时间:2017-03-31 05:46:13

标签: android json parsing

我是Android开发人员的新手,我正在尝试编写一个程序来解析网站中的一些JSON并将其输出到ListView中。但是,当我运行我的程序时,我收到错误:(有超过7行与此错误相同)

  

03-31 05:25:14.296 3196-3196 / nazilli.tenispark E / FAILED:Json解析   错误:价值   { “0”: “2”, “ID”: “2”, “1”: “0”, “CID”: “0”, “2”: “1”, “UID”: “1”,” 3 “:” 2017年4月1" 日, “日期”: “2017年4月1日”, “4”: “20”, “小时”: “20”}   类型org.json.JSONObject无法转换为JSONArray

     

03-31 05:25:14.297 3196-3196 / nazilli.tenispark E / FAILED:Json解析错误:   值   { “0”: “3”, “ID”: “3”, “1”: “0”, “CID”: “0”, “2”: “1”, “UID”: “1”,” 3 “:” 2017年4月8" 日, “日期”: “2017年4月8日”, “4”: “20”, “小时”: “20”}   类型org.json.JSONObject无法转换为JSONArray

我想解析的JSON是:

  

{ “预约”:[{ “0”: “2”, “ID”: “2”, “1”: “0”, “CID”: “0”, “2”: “1”, “UID”: “1”, “3”: “2017年4月1日”, “日期”: “2017年4月1日”, “4”: “20”, “小时”: “20”},{ “0”: “3”, “ID”: “3”, “1”: “0”, “CID”: “0”, “2”: “1”, “UID”: “1”,“3 “:” 2017年4月8" 日, “日期”: “2017年4月8日”, “4”: “20”, “小时”: “20”},{ “0”: “4”,“ID “:” 4" , “1”: “0”, “CID”: “0”, “2”: “1”, “UID”: “1”, “3”: “2017年4月15日”, “日期”: “2017年4月15日”, “4”: “20”, “小时”: “20”},{ “0”: “5”, “ID”: “5”, “1”: “0”, “CID”: “0”, “2”: “1”, “UID”: “1”, “3”: “2017年4月22日”, “日期”:“2017年4月22日“ ”4“: ”20“, ”小时“: ”20“},{ ”0“: ”6“, ”ID“: ”6“, ”1“: ”0“, ”CID“:” 0 ”, “2”: “1”, “UID”: “1”, “3”: “2017年3月24日”, “日期”: “2017年3月24日”, “4”: “17”, “小时”: “17”},{ “0”: “7”, “ID”: “7”, “1”: “0”, “CID”: “0”, “2”: “1”, “UID”: “1”, “3”: “2017年3月26日”, “日期”: “2017年3月26日”, “4”: “17”, “小时”: “17”},{ “0”: “8”, “ID”: “8”, “1”: “1”, “CID”: “1”, “2”: “1”, “UID”: “1”,“3 “:” 2017年3月26" 日, “日期”: “2017年3月26日”, “4”: “16”, “小时”: “16”},{ “0”: “9”,“ID “:” 9" , “1”: “2”, “CID”: “2”, “2”: “1”, “UID”: “1”, “3”: “2017年3月26日”, “日期”: “2017年3月26日”, “4”: “15”, “小时”: “15”},{ “0”: “10”, “ID”: “10”, “1”: “3”, “CID”: “3”, “2”: “1”, “UID”: “1”, “3”: “2017年3月26日”,“DA TE “:” 2017年3月26" 日, “4”: “13”, “小时”: “13”}]}

这是我的listview自定义行java

public class adapter_appointment extends ArrayAdapter<String> {
    public adapter_appointment(Context context, String[] data){
        super(context, R.layout.row_layout, data);
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        LayoutInflater inflater = LayoutInflater.from(getContext());
        View customView = inflater.inflate(R.layout.row_layout, parent, false);
        String all_data = getItem(position);
        TextView title = (TextView) customView.findViewById(R.id.title);
        //title.setText(all_data.toString());
        try {
            JSONArray array = new JSONArray(all_data);
            JSONObject obj = array.getJSONObject(0);
            Log.d("SUCCESS", "JSON Object: " + obj.toString());
            if (obj.has("date") && !obj.isNull("date")) {
                title.setText(obj.getString("date").toString());
                Log.d("SUCCESS", "Date: " + obj.getString("date").toString());
            } else {
                // Do something
            }
        } catch (Exception e) {
            Log.e("FAILED", "Json parsing error: " + e.getMessage());
        }
        return customView;
    }
}

这是json.java

public class my_appointments extends AppCompatActivity {
    ListView lv;
    InputStream is = null;
    String line = null;
    String result = null;
    String[] data;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_appointments);

        lv=(ListView) findViewById(R.id.my_appointments);
        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitNetwork().build());
        //Run
        getData();
        ArrayAdapter adapter = new adapter_appointment(this, data);
        lv.setAdapter(adapter);
    }

    private void getData()
    {
        try {
            URL url = new URL("MY URL");
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("GET");
            is=new BufferedInputStream(con.getInputStream());
            //
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            StringBuilder sb = new StringBuilder();
            while((line=br.readLine()) != null)
            {
                sb.append(line + "\n");
            }
            is.close();
            result=sb.toString();
            //
            JSONObject jo = new JSONObject(result);
            JSONArray ja = jo.getJSONArray("appointments");
            data = new String[ja.length()];
            for(int i=0;i<ja.length();i++)
            {
                jo=ja.getJSONObject(i);
                data[i]=jo.toString();
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

如果我不解析:

enter image description here

5 个答案:

答案 0 :(得分:3)

您的appointments JSONArray

<强> JSON

  

{&#34;预约&#34;:[{&#34; 0&#34;:&#34; 2&#34;&#34; ID&#34;:&#34; 2&#34; &#34; 1&#34;:&#34; 0&#34;&#34; CID&#34;:&#34; 0&#34;&#34; 2&#34;:&#34; 1&#34;&#34; UID&#34;:&#34; 1&#34;&#34; 3&#34;:&#34; 2017年4月1日和#34;&#34;日期& #34;:&#34; 2017年4月1日和#34;&#34; 4&#34;:&#34; 20&#34;&#34;小时&#34;:&#34; 20&# 34;}]}

 JSONObject reader = new JSONObject(all_data);
 JSONArray jsonArray = reader.getJSONArray("appointments");
  ......//Do your work//..........

答案 1 :(得分:0)

JSONObject jsonObject= new JSONObject(all_data);

JSONArray jsonArray = jsonObject.getJSONArray("appointments");
 // To get elements from the array 
for(int i=0;i<jsonArray.length;i++){
  JSONObject json = jsonArray.getJSONObject(i);
  String id = json.getString("id");
  String name=json.getString("cid");
}

答案 2 :(得分:0)

JSONObject json = new JSONObject(all_data);
 JSONArray jsonArray = json.getJSONArray("appointments");

你应该从all_data获取数组,并使用那个而不是json

答案 3 :(得分:0)

您可以使用JSON结构创建一个类,并使用GSON来获取User user = gson.fromJson(json, User.class)

之类的数据

答案 4 :(得分:-1)

您的所有数据都有以下数据。如下所示。

 alldata={"0":"2","id":"2","1":"0","cid":"0","2":"1","uid":"1","3":"2017-04-01","date":"2017-04-01","4":"20","hour":"20"}

所以每次你的列表项从那个约会数组中获取数据。所以alldata变量将根据getItem(position)方法的位置进行更改。

因此,alldata是jsonObject。

所以你应该解析如下,

 JSONObject jsonRowData= new JSONObject(allData);
 try{
   jsonRowData.getString("0");
   jsonRowData.getString("id"):
   jsonRowData.getString("1"):
   jsonRowData.getString("cid"):
   jsonRowData.getString("2"):
   jsonRowData.getString("uid"):
   jsonRowData.getString("3");
   jsonRowData.getString("date"):
   jsonRowData.getString("4");
    }catch(Exception e){
    e.printStackTrace();
   }
像你必须打电话一样。希望它有所帮助