【问题标题】:Parse JSONArray in Android Studio在 Android Studio 中解析 JSONArray
【发布时间】:2019-10-11 14:02:25
【问题描述】:

我尝试从 AndroidStudio 中的 PHP 脚本解析 JSONArray。我从我的 PHP 脚本中得到这个 JSON 响应: [{"0":"Firstname","meta_value":"Firstname"},{"0":"Lastname","meta_value":"Lastname"},{"valid":"1"},{"entered":"5"}] 现在我尝试解析 JSONArray 以获取值 meta_value 所以我想获取“姓氏”和“名字”。

但我的代码中一定有错误,因为我得到了回复:Exception: No value for meta_value

 public class SendPostRequest extends AsyncTask<String, Void, String> {
         String data ="";
         String dataParsed = "";
         String singleParsed ="";

         protected void onPreExecute(){}

         protected String doInBackground(String... arg0) {

             try {

                 URL url = new URL("https://sample.com/code2.php"); // here is your URL path
                 JSONObject postDataParams = new JSONObject();
                 postDataParams.put("sdata", scannedData);
                Log.e("params",postDataParams.toString());

                 HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                 conn.setReadTimeout(15000 /* milliseconds */);
                 conn.setConnectTimeout(15000 /* milliseconds */);
                 conn.setRequestMethod("POST");
                 conn.setDoInput(true);
                 conn.setDoOutput(true);

                 OutputStream os = conn.getOutputStream();
                 BufferedWriter writer = new BufferedWriter(
                    new OutputStreamWriter(os, "UTF-8"));
                 writer.write(getPostDataString(postDataParams));

                 writer.flush();
                 writer.close();
                 os.close();

                 int responseCode=conn.getResponseCode();

                 if (responseCode == HttpsURLConnection.HTTP_OK) {

                     BufferedReader in=new BufferedReader(new
                        InputStreamReader(
                        conn.getInputStream()));

                     StringBuffer sb = new StringBuffer("");
                     String line="";

                     while((line = in.readLine()) != null) {
                    data = data + line;
                    sb.append(line);
                    break;
                     }



                     in.close();

                     JSONArray reader2 = new JSONArray(data);
                     for(int i =0 ;i <reader2.length(); i++){
                    JSONObject JO = (JSONObject) reader2.get(i);
                    singleParsed =  "Name:" + JO.get("meta_value") + "\n";

                    dataParsed = dataParsed + singleParsed +"\n" ;


                }





                return dataParsed;
            }
            else {
                return new String("false : "+responseCode);
            }
        }
        catch(Exception e){
            return new String("Exception: " + e.getMessage());
        }

    }

    @Override
    protected void onPostExecute(String result) {
        Toast.makeText(getApplicationContext(), result,
                Toast.LENGTH_LONG).show();
    }


}

请不要将我的答案标记为重复,因为我搜索了 2 周但没有找到答案!谢谢:)

【问题讨论】:

    标签: java arrays json parsing


    【解决方案1】:

    我建议您使用 GSON 对 JSON 响应进行序列化和反序列化。这使得它很容易处理。 GSON

    示例:

    new Gson().fromJson("YourJsonHere",JsonElement.class);
    

    干杯塔里克

    【讨论】:

    • 我是新手,请您详细解释一下。非常感谢!
    • 想象你有一个类,它是某种蓝图。例如。您有一个包含制造商名称和型号名称字段的汽车类。您可以使用 gson 将此类序列化为 json 对象。或者使用 gson 反序列化它。如果您没有作为对象挂件的类,则可以使用通用类 JsonElement,它可以表示任何 json 结构(数组和对象)。如果你知道你实际上得到了一个 json-array,你也可以使用 JsonArray.class,或者如果你知道你得到一个 json-object,你可以使用 JsonObject.class。这就是魔法。
    • 不,如果你用谷歌搜索存储库和一些代码示例,那将是非常酷的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 2016-08-17
    相关资源
    最近更新 更多