简体   繁体   English

URL解析中的数组和对象JSON

[英]Array and Object JSON from URL Parsing

I was a novice at the json parsing from url. 我是从url解析json的新手。 yesterday I've tried parsing json simple data. 昨天,我尝试解析json简单数据。 Now I am confused to form a json parsing the data as below. 现在我很困惑,形成一个解析数据的json,如下所示。 I still can not how to parse arrays and objects in json. 我仍然无法解析json中的数组和对象。 Please help me guys .. 请帮助我..

here my MainActivity.java 这是我的MainActivity.java

public class MainActivity extends ListActivity {
/** Called when the activity is first created. */

private static String URL = "http://api.themoviedb.org/3/genre/18/movies?api_key=d397dd2d354f088c6f0eb91c6b160bb0";

// tag
private static final String TAG_ID = "id";
private static final String TAG_page = "page";
private static final String TAG_results = "results";
private static final String TAG_backdrop_path = "backdrop_path";
private static final String TAG_id = "id";
private static final String TAG_original_title = "original_title";
private static final String TAG_release_date = "release_date";
private static final String TAG_poster_path = "poster_path";
private static final String TAG_title = "title";
private static final String TAG_vote_average = "vote_average";
private static final String TAG_vote_count = "vote_count";
private static final String TAG_total_pages = "total_pages";
private static final String TAG_total_results = "total_results";
JSONArray results = null;
JSONArray id = null;
JSONArray page = null;
JSONArray pages = null;
JSONArray tot_result = null;

// panggil class parser
JSONparser parser = new JSONparser();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ArrayList<HashMap<String, String>> genreList = new ArrayList<HashMap<String, String>>();

    JSONObject json = parser.getJSONFromUrl(URL);
    try {
        id = json.getJSONArray(TAG_ID);
        page = json.getJSONArray(TAG_page);
        pages = json.getJSONArray(TAG_total_pages);
        tot_result = json.getJSONArray(TAG_total_results);

        for (int i = 0; i < results.length(); i++) {
            JSONObject data = results.getJSONObject(i);

            String backdrop = data.getString(TAG_backdrop_path);
            String idd = data.getString(TAG_id).toString();
            String ori = data.getString(TAG_original_title);
            String releas = data.getString(TAG_release_date);
            String poster = data.getString(TAG_poster_path);
            String title = data.getString(TAG_title);
            String average = data.getString(TAG_vote_average);
            String count = data.getString(TAG_vote_count);

            HashMap<String, String> map = new HashMap<String, String>();
            map.put(TAG_backdrop_path, backdrop);
            map.put(TAG_ID, idd);
            map.put(TAG_original_title, ori);
            map.put(TAG_release_date, releas);
            map.put(TAG_poster_path, poster);
            map.put(TAG_title, title);
            map.put(TAG_vote_average, average);
            map.put(TAG_vote_count, count);

            genreList.add(map);
        }

        // Sort by
        /*********************************
         * Collections.sort(genreList, new Comparator<HashMap<String,
         * String>>() {
         * 
         * @Override public int compare(HashMap<String, String> a,
         *           HashMap<String, String> b) { return
         *           a.get(TAG_NAMA).compareTo(b.get(TAG_ID)); } });
         ******************************/

    } catch (JSONException e) {
        // TODO: handle exception
        e.printStackTrace();
    }

    // tampilkan ke listadapter
    ListAdapter adapter = new SimpleAdapter(this, genreList,
            R.layout.list_data, new String[] { TAG_ID, TAG_page,
                    TAG_results, TAG_backdrop_path, TAG_id,
                    TAG_original_title, TAG_release_date, TAG_poster_path,
                    TAG_title, TAG_vote_average, TAG_vote_count,
                    TAG_total_pages, TAG_total_results }, new int[] {
                    R.id.id, R.id.page, R.id.result, R.id.backdrop_path,
                    R.id.idd, R.id.original_title, R.id.release_date,
                    R.id.poster_path, R.id.title, R.id.vote_average,
                    R.id.vote_count, R.id.total_pages, R.id.total_results });
    setListAdapter(adapter);
}
}

here my JSONparser.java 这是我的JSONparser.java

public class JSONparser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

public JSONparser() {

}

public JSONObject getJSONFromUrl(String url) {
    // http request
    try {

        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);

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

    } catch (UnsupportedEncodingException e) {
        // TODO: handle exception
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        // TODO: handle exception
        e.printStackTrace();
    } catch (IOException e) {
        // TODO: handle exception
        e.printStackTrace();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "utf-8"), 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) {
        // TODO: handle exception
        Log.e("BUffer Error", "Error converting result" + e.toString());
    }

    // try parse string to a json
    try {
        jObj = new JSONObject(json);
    } catch (JSONException e) {
        // TODO: handle exception
        Log.e("Json parser", "error parsing data" + e.toString());
    }

    return jObj;

}

}

here my json data. 这是我的json数据。

{
"id": 18,
"page": 1,
"results": [
    {
        "backdrop_path": "/6xKCYgH16UuwEGAyroLU6p8HLIn.jpg",
        "id": 238,
        "original_title": "The Godfather",
        "release_date": "1972-03-24",
        "poster_path": "/d4KNaTrltq6bpkFS01pYtyXa09m.jpg",
        "title": "The Godfather",
        "vote_average": 9.1999999999999993,
        "vote_count": 125
    },
    {
        "backdrop_path": "/ooqPNPS2WdBH7DgIF4em9e0nEld.jpg",
        "id": 857,
        "original_title": "Saving Private Ryan",
        "release_date": "1998-07-24",
        "poster_path": "/35CMz4t7PuUiQqt5h4u5nbrXZlF.jpg",
        "title": "Saving Private Ryan",
        "vote_average": 8.9000000000000004,
        "vote_count": 83
    }
],
"total_pages": 25,
"total_results": 499
}
JSONObject jObject_Main= new JSONObject(jsonstring);

//get json simple string
String id = jObject_Main.getString("id");
String page = jObject_Main.getString("page");

//get json Array and parse it.
JSONArray jsonArray = jObject_Main
                    .getJSONArray("results");
for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jsonObject = jsonArray.getJSONObject(i);
String backdrop_path=jsonObject.getString("backdrop_path");

}

i hope its useful to you. 我希望它对您有用。

please change this in your code: 请在您的代码中更改此代码:

 JSONObject json = parser.getJSONFromUrl(URL);
    try {
        id = json.getString("id");
        page = json.getString("page");
      tot_result = json.getJSONArray(results);

i hope you understand it. 我希望你能理解。

Your JSON is JSONObject and it contains JSONArray 您的JSON是JSONObject ,并且包含JSONArray

  • Parse Object 解析对象
  • Parse Array 解析数组

Example: 例:

JSONObject jsonObj = new JSONObject(your_json_string);

String id = jsonObj.getString("id");
String page = jsonObj.getString("page"); // or getInt("page");

JSONArray results = jsonObj.getJSONArray("results");

int len = results.length(); // length or size, I don't remember, you can check it

for (int i = 0; i < len; i++) {
    JSONObject obj = results.getJSONObject(i);
    String backdropPath = obj.getString("backdrop_path");
    // ...
}

Try this.. 尝试这个..

In your Global: 在您的全球范围内:

JSONArray results = null;
String id = null;
String page = null;
String pages = null;
String tot_result = null;

Inside Try Catch : 内部尝试接球

JSONObject json = parser.getJSONFromUrl(URL);
try {
    id = json.getString(TAG_ID);             // Changes here
    page = json.getString(TAG_page);         // Changes here

    pages = json.getString(TAG_total_pages);  // Changes here

    tot_result = json.getString(TAG_total_results);  // Changes here

    results = json.getJSONArray(TAG_results);       // Add this line

    for (int i = 0; i < results.length(); i++) {
          // Remaining all correct
    }

EDIT: 编辑:

new DownloadImageTask()
            .execute("your image url");
}

and DownloadImageTask.class DownloadImageTask.class

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {
        imageview.setImageBitmap(result);
    }
}

you need add " results= json.getJSONArray(TAG_results);" 您需要添加“ results = json.getJSONArray(TAG_results);” below "tot_result = json.getJSONArray(TAG_total_results);" 在“ tot_result = json.getJSONArray(TAG_total_results);”下面

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

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