2

私は次のようなjson配列を持っています:

{"GetReportResult":
  [
   {"bulan":"4","total":"2448","type":"CHEESE1K","uang":"8847823"}, 
   {"bulan":"4","total":"572476","type":"ESL","uang":"5863408410"},
   {"bulan":"4","total":"46008","type":"ESL500ML","uang":"234498301"},
   {"bulan":"5","total":"5703","type":"CHEESE1K","uang":"134929306"},
   {"bulan":"5","total":"648663","type":"ESL","uang":"6645764498"},
   {"bulan":"5","total":"51958","type":"WHP","uang":"631994613"},
   {"bulan":"6","total":"6190","type":"CHEESE1K","uang":"104527773"},
   {"bulan":"6","total":"443335","type":"ESL","uang":"4540123082"},
   {"bulan":"6","total":"30550","type":"ESL500ML","uang":"148302378"},
  ]
}

そして、これは私が特定のオブジェクトを取得したいコードです:

JSONArray  weeklyflash = json.getJSONArray("GetReportResult");
JSONObject e = weeklyflash.getJSONObject(i);     
String bulan = e.getString("bulan");

if (bulan == 6){
     map.put("total1", e.getString("total")); // I want the "total" values are from specified bulan (e.g. bulan == 6)
}
else if (bulan == 5){
     map.put("total2", e.getString("total")); // I want the "total" values are from specified bulan (e.g. bulan == 5)
}
else if (bulan == 4){
      map.put("total3", e.getString("total")); // I want the "total" values are from specified bulan (e.g. bulan == 4)
}

私が得たのは次のようなものです:

  total1  |   total2   |  total3
----------------------------------
  2448    |   2448     |  2448
  572476  |   572476   |  572476
  46008   |   46008    |  46008

指定されたオブジェクトの値から値を取得したい (たとえば、"total"where "bulan"= 5 からすべての値を取得したい)。どうやってするか?そして、私が欲しいのは次のようなものです:

  total1  |   total2   |  total3
----------------------------------
  6190    |   5703     |  2448
  443335  |   648663   |  572476
  30550   |   51958    |  46008
4

5 に答える 5

2

どうぞ

try {
    ArrayList < String > listBulan4 = new ArrayList < String > ();
    ArrayList < String > listBulan5 = new ArrayList < String > ();
    ArrayList < String > listBulan6 = new ArrayList < String > ();

    JSONObject jsonObject = new JSONObject("jsonString");

    JSONArray array = jsonObject.getJSONArray("GetReportResult");

    for (int i = 0; i < array.length(); i++) {
        JSONObject object = array.getJSONObject(i);

        int bulanValue = Integer.parseInt(object.getString("bulan"));

        switch (bulanValue) {
        case 4:
            listBulan4.add(object.getString("total"));
            break;
        case 5:
            listBulan5.add(object.getString("total"));
            break;
        case 6:
            listBulan6.add(object.getString("total"));
            break;
        }
    }

    Map < String, ArrayList < String >> map = new HashMap < String, ArrayList < String >> ();
    map.put("total1", listBulan6);
    map.put("total2", listBulan5);
    map.put("total3", listBulan4);

} catch (Exception e) {}

以下はコードです。

package org.sample;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class SOActivity extends Activity {

    String string = "{\"GetReportResult\":[{\"bulan\":\"4\",\"total\":\"2448\",\"type\":\"CHEESE1K\",\"uang\":\"8847823\"},{\"bulan\":\"4\",\"total\":\"572476\",\"type\":\"ESL\",\"uang\":\"5863408410\"},{\"bulan\":\"4\",\"total\":\"46008\",\"type\":\"ESL500ML\",\"uang\":\"234498301\"},{\"bulan\":\"5\",\"total\":\"5703\",\"type\":\"CHEESE1K\",\"uang\":\"134929306\"},{\"bulan\":\"5\",\"total\":\"648663\",\"type\":\"ESL\",\"uang\":\"6645764498\"},{\"bulan\":\"5\",\"total\":\"51958\",\"type\":\"WHP\",\"uang\":\"631994613\"},{\"bulan\":\"6\",\"total\":\"6190\",\"type\":\"CHEESE1K\",\"uang\":\"104527773\"},{\"bulan\":\"6\",\"total\":\"443335\",\"type\":\"ESL\",\"uang\":\"4540123082\"},{\"bulan\":\"6\",\"total\":\"30550\",\"type\":\"ESL500ML\",\"uang\":\"148302378\"}]}";
    Map < String, ArrayList < String >> map;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings);
        map = new HashMap < String, ArrayList < String >> ();
        try {
            ArrayList < String > listBulan4 = new ArrayList < String > ();
            ArrayList < String > listBulan5 = new ArrayList < String > ();
            ArrayList < String > listBulan6 = new ArrayList < String > ();

            JSONObject jsonObject = new JSONObject(string);

            JSONArray array = jsonObject.getJSONArray("GetReportResult");

            for (int i = 0; i < array.length(); i++) {
                JSONObject object = array.getJSONObject(i);

                int bulanValue = Integer.parseInt(object.getString("bulan"));

                switch (bulanValue) {
                case 4:
                    listBulan4.add(object.getString("total"));
                    break;
                case 5:
                    listBulan5.add(object.getString("total"));
                    break;
                case 6:
                    listBulan6.add(object.getString("total"));
                    break;
                }
            }

            map.put("total1", listBulan6);
            map.put("total2", listBulan5);
            map.put("total3", listBulan4);

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

        Log.i("test", map.toString());

    }

}
于 2012-06-28T05:13:32.187 に答える
1

あなたのコードは正しいようです。

ハッシュ マップは重複キーを許可しません。ここでは、重複キーを配置しようとしています。

だから試してみてくださいArrayList

このようなもの:

ArrayList < String > listBulan4 = new ArrayList < String > ();
  listBulan4.add(object.getString("total"));
于 2012-06-28T08:24:28.917 に答える
1

マップを使用します。

Map のキーは、合計が必要な bulan 値です。

配列を反復処理し、関連する blan 値の合計を更新します。

于 2012-06-28T04:20:41.257 に答える
1

この行は問題を起こすと思います

ブラン==6

この方法を試してみてください...

ブラン.equals("6")

お役に立てると思います。

ありがとう

于 2012-06-28T04:21:53.643 に答える
0

あなたのコードは私にはうまく見えます。ちょうど試して

  if (bulan.equals("6")){
  map.put("total1", e.getString("total")); // I want the "total" values are from       specified bulan (e.g. bulan == 6)
}
else if (bulan.equals("5")){
     map.put("total2", e.getString("total")); // I want the "total" values are from specified bulan (e.g. bulan == 5)
 }
  else if (bulan.equals("4")){
     map.put("total3", e.getString("total")); // I want the "total" values are from specified bulan (e.g. bulan == 4)
}
于 2012-06-28T05:00:22.877 に答える