简体   繁体   English

如何在Android中解析此JSON响应?

[英]How to parse this JSON response in Android?

I have tried to parse the data still unable to do . 我试图解析仍然无法执行的数据。

String jsonData = "[{\"id\":\"7\",\"customer_id\":\"1\",\"product_type_id\":\"1\",\"quantity\":\"1\",\"ordered_on\":\"2015-12-01\",\"product_consumption_type\":\"general\",\"reason\":\"\",\"productType\":{\"id\":\"1\",\"name\":\"Full Cream Milk\",\"description\":\"\",\"measurement\":\"\"}},{\"id\":\"3\",\"customer_id\":\"1\",\"product_type_id\":\"1\",\"quantity\":\"0\",\"ordered_on\":\"2015-12-02\",\"product_consumption_type\":\"general\",\"reason\":\"\",\"productType\":{\"id\":\"1\",\"name\":\"Full Cream Milk\",\"description\":\"\",\"measurement\":\"\"}}]";

This is what I've tried so far: 到目前为止,这是我尝试过的:

try {
    JsonArrayRequest req = new JsonArrayRequest(jsonData, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            Log.d(TAG, response.toString());
            try {
                //parsing the value of jsaon array
                for (int i = 0; i < response.length(); i++) {
                    JSONObject details = (JSONObject) response.get(i);
                    String da = details.getString("ordered_on");
                    int qty = Integer.parseInt(details.getString("quantity"));
                    JSONObject prod_det = details.getJSONObject("productType");
                    String na = prod_det.getString("name");
                    ProductType pt = new ProductType(na, qty);
                    Product prod = new Product(da, pt);
                    list.add(prod);
                }
            } catch (JSONException e) {
                e.printStackTrace();
                Toast.makeText(MonthlySummaryActivity.this, "ERROR" + e.getMessage(), Toast.LENGTH_SHORT).show();
                adapter.notifyDataSetChanged();
            }
        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(MonthlySummaryActivity.this, "error::" + error.getMessage(), Toast.LENGTH_LONG).show();

        }
    });
} catch (Exception ex) {
    ex.printStackTrace();
}
loading.hide();
return list;

you can parse JSON data in two ways. 您可以通过两种方式解析JSON数据。

1) Create your own parser class. 1)创建自己的解析器类。

2) Use library for parsing json string. 2)使用库来解析json字符串。

1) if json string is short then you should go with your own parser class as below. 1)如果json字符串很短,那么您应该使用自己的解析器类,如下所示。

String name;

        try {
            JSONArray array = new JSONArray(YOUR JSON STRING);
            JSONObject obj;
            for (int i = 0; i < array.length(); i++) {
                obj = array.getJSONObject(i);
                name = obj.getString(KEY_NAME);
                ......
            }

        }catch (Exception e){
            e.printStackTrace();
        }

2) use Gson library. 2)使用Gson库。 for Gson u can use this . 对于Gson,您可以使用此功能

Hope I could help u. 希望我能帮助你。

public List<Product> parse(String jsonData) throws JSONException {
    List<Product> productList = new ArrayList();
    JSONArray orderArray = new JSONArray(jsonData);
    for (int i = 0, count = orderArray.length(); i < count; i++) {
        JSONObject productJO = orderArray.getJSONObject(i);

        ProductType productType = new ProductType();
        // parse the product type
        JSONObject productTypeJO = productJO.getJSONObject("productType");
        String typeId = productTypeJO.getString("id");
        String name = productTypeJO.getString("name");
        String description = productTypeJO.getString("description");
        String measurement = productTypeJO.getString("measurement");

        productType.setId(typeId);
        productType.setName(name);
        productType.setDescription(description);
        productType.setMeasurement(measurement);

        // parse the product
        String id = productJO.getString("id");
        String customerId = productJO.getString("customer_id");
        String productTypeId = productJO.getString("product_type_id");
        String quantity = productJO.getString("quantity");
        String orderedOn = productJO.getString("ordered_on");
        String productConsumptionType = productJO.getString("product_consumption_type");
        String reason = productJO.getString("reason");

        Product product = new Product();
        product.setId(id);
        product.setCustomerId(customerId);
        product.setProductTypeId(productTypeId);
        product.setQuantity(quantity);
        product.setOrderedOn(orderedOn);
        product.setProductConsumptionType(productConsumptionType);
        product.setReason(reason);
        product.setProductType(productType);

        productList.add(product);
    }
    return productList;
}

Simple and Efficient : Use Googlle's Gson library 简单高效:使用Googlle的Gson库

  • Put this in build.gradle file : implementation 'com.google.code.gson:gson:2.6.2' 将其放在build.gradle文件中: implementation 'com.google.code.gson:gson:2.6.2'
  • Now convert the JSON String to a convenient datastrucutre like HashMap in 2 lines like this. 现在,像这样在两行中将JSON字符串转换为方便的数据结构(例如HashMap)。

Type type = new TypeToken<Map<String, String>>(){}.getType();
Map<String, String> myMap = gson.fromJson(JsonString , type);

Thank me later :) 晚点再谢我 :)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM