繁体   English   中英

Android JSON数据检索

[英]Android JSON data retrieval

我是Android新手,无法从下面的JSON代码检索数据。 请回复并提出建议。

杰森代码:-

{"category":{"name":["Spa","Salon","Makeup"],"brand_title":["Aura Thai Spa- Greater Kailash 1",.....]}}

Android代码:

public class Salon extends AppCompatActivity {

    String url="my_url";
    String catname,brandname;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_salon);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    sname=(TextView)findViewById(R.id.person_name);
    bname=(TextView)findViewById(R.id.person_age);
    new MyAsyncTask().execute(url);
}

class MyAsyncTask extends AsyncTask<String, String, JSONObject> {
    URLConnection urlConnection;
    String result = "";
    JSONObject  jsonRootObject;
    @Override
    protected JSONObject doInBackground(String... params) {
        try {
            URL url_data = new URL(url);
            urlConnection = url_data.openConnection();
            urlConnection.connect();

        // Convert response to string using String Builder
            InputStream inputStream = urlConnection.getInputStream();
            BufferedReader bReader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"), 8);
            StringBuilder sBuilder = new StringBuilder();

            String line;
            while ((line = bReader.readLine()) != null) {
                sBuilder.append(line + "\n");
            }

            inputStream.close();
            result = sBuilder.toString();

        }catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        catch (Exception e) {
            //Log.e("StringBuilding & BufferedReader", "Error converting result " + e.toString());
        }
        try{
           jsonRootObject = new JSONObject(result);
        }catch(JSONException e){
            e.printStackTrace();
        }
        return jsonRootObject;
    }

    protected void onPostExecute(JSONObject result){
        try {

            //Iterate the jsonArray and print the info of JSONObjects

            JSONArray jsonArray = jsonRootObject.getJSONArray("name");

            for(int i=0; i < jsonArray.length(); i++) {
                JSONObject name_0 = jsonArray.getJSONObject(i);
                catname = name_0.getString("").toString();
            }
          /*  JSONArray jsonArray2 = jsonRootObject.getJSONArray("brand_name");
            JSONObject brand = jsonArray2.getJSONObject(0);
            brandname = brand.getString("brand_title[0]");*/
                //loat salary = Float.parseFloat(jsonObject.optString("salary").toString());

            sname.setText(catname);
            //bname.setText(brandname);
        } catch (JSONException e) {e.printStackTrace();}
    }
    }

}

尝试更换:

JSONArray jsonArray = jsonRootObject.getJSONArray("name");

与:

JSONArray jsonArray = jsonRootObject.getJSONObject("category").getJSONArray("name");

当您这样做时:

jsonRootObject = new JSONObject(result);

您将获取整个JSONobject字符串本身,因此您只需要获取category对象:

jsonRootObject = jsonRootObject.getJSONObject("category")

然后您可以从类别中获取数组:

JSONArray jsonArray = jsonRootObject.getJSONArray("name");

尝试这样解析。 这将为您提供所需的名称和brand_title

// Declare outside onCreate
JSONObject topObject;
JSONObject category;
JSONArray name;
String json;
JSONArray brand_title;


// the parsing

    json = "{\"category\":{\"name\":[\"Spa\",\"Salon\",\"Makeup\"],\"brand_title\":[\"Aura Thai Spa- Greater Kailash 1\"]}}";

        try {
            topObject = new JSONObject(json);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        try {
            category = topObject.getJSONObject("category");
        } catch (JSONException e) {
            e.printStackTrace();
        }
        try {
            name = category.getJSONArray("name");
        } catch (JSONException e) {
            e.printStackTrace();
        }

        for(int i = 0; i<name.length(); i++){
            try {
                String parsedNanes = name.getString(i);
                Log.i("parsedNames", parsedNanes);
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }

        try {
            brand_title = category.getJSONArray("brand_title");
        } catch (JSONException e) {
            e.printStackTrace();
        }

        for(int i = 0; i<brand_title.length(); i++){
            try {
                String parsedBrandTitles = brand_title.getString(i);
                Log.i("parsedBrandTitles", parsedBrandTitles);
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }

暂无
暂无

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

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