【问题标题】:Multiple JSON objects and get array in android多个JSON对象并在android中获取数组
【发布时间】:2015-11-04 16:07:46
【问题描述】:

我在解析 JSON 时遇到问题。 http://www.json-generator.com/api/json/get/cdWQqIXQfC?indent=2 其实我想得到下面的

"jean": {
          "color": "red", 
          "cost": 15000, 
          "size": 28
        }

从 URL 获取。然后需要设置listview。但首先我没有得到 json 数组本身。\ 下面的代码抛出异常,对男性没有任何价值。

我尝试过使用

public class MainActivity extends Activity {
    String firstname = null;
    String lastname = null;
    String username = null;
    String username1 = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new AsyncTaskParseJson().execute();
    }

    public class AsyncTaskParseJson extends AsyncTask<String, String, String> {
        final String TAG = "AsyncTaskParseJson.java";
        String yourJsonStringUrl = "http://www.json-generator.com/api/json/get/cdWQqIXQfC?indent=2";
        JSONArray dataJsonArr = null;
        JSONObject dataJsonArry = null;
        JSONObject dataJsonArry1 = null;
        JSONObject dataJsonArry2 = null;

        @Override
        protected void onPreExecute() {
        }

        @Override
        protected String doInBackground(String... arg0) {
            try {
                JsonParser jParser = new JsonParser();
                JSONObject json = jParser.getJSONFromUrl(yourJsonStringUrl);
                dataJsonArry = json.getJSONObject("online");
                dataJsonArry1 = json.getJSONObject("men");
                dataJsonArry2 = json.getJSONObject("clothes");
                dataJsonArr = json.getJSONArray("jean");
                for (int i = 0; i < dataJsonArr.length(); i++) {
                    JSONObject c = dataJsonArr.getJSONObject(i);
                    lastname = c.getString("cost");
                    username = c.getString("size");
                    Log.e("Hello", "firstname: " + firstname + ", lastname: "
                            + lastname + ", username: " + username + "star:"
                            + username1);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String strFromDoInBg) {
        }
    }
}

json 解析器:

public class JsonParser {

    final String TAG = "JsonParser.java";

    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

    public JSONObject getJSONFromUrl(String url) {

        try {

            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();           

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {

            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();

        } catch (Exception e) {
            Log.d(TAG, "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e(TAG, "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;
    }
}

我不知道如何实现这个...谁能帮帮我...

【问题讨论】:

  • jeanJSONObject,而不是 JSONArray

标签: java android arrays json


【解决方案1】:

试试这个:

try { 
            JsonParser jParser = new JsonParser();
            JSONObject json = jParser.getJSONFromUrl(yourJsonStringUrl);
            JSONObject onlineJsonObj = json.getJSONObject("online");
            JSONObject menJsonObj = online.getJSONObject("men");
            JSONObject clothesJsonObj= menJsonObj.getJSONObject("clothes");
            JSONObject jeanJsonObj= clothesJsonObj.getJSONObject("jean");

                lastname = clothesJsonObj.getString("cost");
                username = clothesJsonObj.getString("size");
                Log.e("Hello", "firstname: " + firstname + ", lastname: "
                        + lastname + ", username: " + username + "star:"
                        + username1);
            } 
        } catch (JSONException e) {
            e.printStackTrace();
        } 
        return null; 
    } 

您的响应中没有 JSONArray。 JsonArray 在 '[' 和 ']' 括号之间。

【讨论】:

  • 嗨,我刚刚更改了数组值的代码,但它显示异常......你知道吗?像这样JSONObject clothesJsonObj = menJsonObj.getJSONObject("clothes"); dataJsonArr = clothesJsonObj.getJSONArray("jean"); for (int i = 0; i &lt; dataJsonArr.length(); i++) { JSONObject c = dataJsonArr.getJSONObject(i); size = c.getString("size"); color = c.getString("color"); cost = c.getString("cost");
  • 再次,您的 Json 响应中不存在数组。那你为什么还在用 jsonArray。所有的响应都是对象的形式。上面的代码你试过了吗?
【解决方案2】:

Jean 是 JSONObject,您在代码中使用 JSONArray。此外sizecost 是数字,但您使用getString()。所以这段代码应该可以工作(请为您的变量使用相关名称:不要将成本存储在名为 lastname 的变量中)

JsonParser jParser = new JsonParser();
JSONObject json = jParser.getJSONFromUrl(yourJsonStringUrl);
JSONObject dataJsonOnline = json.getJSONObject("online");
JSONObject dataJsonMen = dataJsonOnline.getJSONObject("men");
JSONObject dataJsonCloth = dataJsonMen.getJSONObject("clothes");
JSONObject dataJsonJean = dataJsonCloth.getJSONObject("jean");

String color = dataJsonJean.getString("color");
int cost  = dataJsonJean.getInt("cost");
int size = dataJsonJean.getString("size");

【讨论】:

  • 对不起,我不明白你的评论。从doc 开始,方法是String getString(String)ìnt getInt(String)getString(int) 不存在。
猜你喜欢
  • 2020-11-09
  • 2018-10-15
  • 1970-01-01
  • 1970-01-01
  • 2016-12-17
  • 1970-01-01
  • 2013-08-04
  • 2020-10-03
  • 1970-01-01
相关资源
最近更新 更多