在android中如何将JSONObject转换为JSONArray?

在android中如何将JSONObject转换为JSONArray?,android,Android,这里是我的json数据,我需要将这个innings对象转换为json数组 { "innings": { "b_1": { "batting_order": [ "s_watson", "a_rahane", "d_yagnik", "r_dravid", "s_binny", "b_hodge" ], "runs": 185, "balls": 120, "fall_of_wickets": [ "AM Rahane at 71 runs, in 7.2 over", "DH Yagnik at

这里是我的json数据,我需要将这个innings对象转换为json数组

{
"innings": {
"b_1": {
"batting_order": [
"s_watson",
"a_rahane",
"d_yagnik",
"r_dravid",
"s_binny",
"b_hodge"
],
"runs": 185,
"balls": 120,
"fall_of_wickets": [
"AM Rahane at 71 runs, in 7.2 over",
"DH Yagnik at 84 runs, in 9.3 over",
"RS Dravid at 113 runs, in 13.2 over",
"SR Watson at 159 runs, in 17.3 over"
],
"wide": 0,
"run_rate": "9.25",
"fours": 12,
"run_str": "185/4 in 20.0",
"wickets": 4,
"wicket_order": [
"a_rahane",
"d_yagnik",
"r_dravid",
"s_watson"
],
"extras": 10,
"bowling_order": [
"a_chandila",
"r_shukla",
"j_faulkner",
"k_cooper",
"s_trivedi",
"s_watson",
"s_binny"
],
"key": "b_1",
"noball": 0,
"sixes": 7,
"legbye": 0,
"bye": 0,
"overs": "20.0",
"dotballs": 30,
"partnerships": [
{
"player_a_six": 3,
"player_a_four": 5,
"first_ball": "bfee9a98-76a9-4959-b1cb-638989c96bff",
"overs_balls": "7.1",
"four": 6,
"index": 1,
"six": 3,
"dismissed": false,
"player_b_four": 1,
"start_over": "0.1",
"end_over": "7.1",
"innings": "1",
"player_b_runs": 16,
"player_b_six": 0,
"player_b_balls": 14,
"runs": 71,
"balls": 43,
"player_b": "a_rahane",
"player_a": "s_watson",
"player_a_balls": 29,
"last_ball": "4825aad2-25d8-434c-86bb-11f8eedbdc4f",
"player_a_runs": 54,
"match": "iplt20_2013_g30",
"team": "b",
"run_rate": "9.91"
},
{
"player_a_six": 0,
"player_a_four": 0,
"first_ball": "c7351d98-9012-4361-ba2a-f5cd8665587d",
"overs_balls": "2.1",
"four": 1,
"index": 2,
"six": 0,
"dismissed": true,
"player_b_four": 0,
"start_over": "7.2",
"end_over": "9.2",
"innings": "1",
"player_b_runs": 4,
"player_b_six": 0,
"player_b_balls": 5,
"runs": 13,
"balls": 13,
"player_b": "s_watson",
"player_a": "a_rahane",
"player_a_balls": 1,
"last_ball": "c4134225-b057-4a43-9e0f-cd227b377540",
"player_a_runs": 0,
"match": "iplt20_2013_g30",
"team": "b",
"run_rate": "6.00"
},
{
"player_a_six": 0,
"player_a_four": 0,
"first_ball": "17d6fc7f-d37e-45ee-9b0a-aaf15221d8c4",
"overs_balls": "3.5",
"four": 1,
"index": 3,
"six": 1,
"dismissed": true,
"player_b_four": 1,
"start_over": "9.3",
"end_over": "13.1",
"innings": "1",
"player_b_runs": 21,
"player_b_six": 1,
"player_b_balls": 14,
"runs": 29,
"balls": 23,
"player_b": "s_watson",
"player_a": "d_yagnik",
"player_a_balls": 1,
"last_ball": "cf9137bb-9fd7-49c1-9fdc-3e5c8492ee3b",
"player_a_runs": 0,
"match": "iplt20_2013_g30",
"team": "b",
"run_rate": "7.57"
},
{
"player_a_six": 0,
"player_a_four": 0,
"first_ball": "0ea39992-7647-4916-bfcc-b2beba9dbf00",
"overs_balls": "4.1",
"four": 2,
"index": 4,
"six": 2,
"dismissed": true,
"player_b_four": 0,
"start_over": "13.2",
"end_over": "17.2",
"innings": "1",
"player_b_runs": 22,
"player_b_six": 2,
"player_b_balls": 12,
"runs": 46,
"balls": 25,
"player_b": "s_watson",
"player_a": "r_dravid",
"player_a_balls": 1,
"last_ball": "2eaaa026-485f-493c-9a70-551abc2bb83c",
"player_a_runs": 0,
"match": "iplt20_2013_g30",
"team": "b",
"run_rate": "11.04"
},
{
"player_a_six": 0,
"player_a_four": 0,
"first_ball": "4720b7ff-e963-4bc8-9138-6124c2b261fc",
"overs_balls": "2.4",
"four": 2,
"index": 5,
"six": 1,
"dismissed": true,
"player_b_four": 1,
"start_over": "17.3",
"end_over": "19.6",
"innings": "1",
"player_b_runs": 16,
"player_b_six": 1,
"player_b_balls": 9,
"runs": 26,
"balls": 16,
"player_b": "s_binny",
"player_a": "s_watson",
"player_a_balls": 1,
"last_ball": "76481b09-e7e4-4097-9e88-b6884f069082",
"player_a_runs": 0,
"match": "iplt20_2013_g30",
"team": "b",
"run_rate": "9.75"
}
]
},
"a_1": {
"batting_order": [
"m_vijay",
"m_hussey",
"s_raina",
"ms_dhoni",
"r_jadeja",
"d_bravo",
"c_morris"
],
"runs": 186,
"balls": 119,
"fall_of_wickets": [
"M Vijay at 22 runs, in 2.3 over",
"SK Raina at 112 runs, in 12.4 over",
"MEK Hussey at 154 runs, in 16.1 over",
"RA Jadeja at 154 runs, in 16.3 over",
"MS Dhoni at 175 runs, in 18.6 over"
],
"wide": 0,
"run_rate": "9.38",
"fours": 18,
"run_str": "186/5 in 19.5",
"wickets": 5,
"wicket_order": [
"m_vijay",
"s_raina",
"m_hussey",
"r_jadeja",
"ms_dhoni"
],
"extras": 7,
"bowling_order": [
"m_sharma",
"j_holder",
"c_morris",
"r_ashwin",
"r_jadeja",
"d_bravo"
],
"key": "a_1",
"noball": 0,
"sixes": 4,
"legbye": 0,
"bye": 0,
"overs": "19.5",
"dotballs": 21,
"partnerships": [
{
"player_a_six": 0,
"player_a_four": 0,
"first_ball": "1dd3e8b3-b7a6-4417-9b2f-28b3b17353d5",
"overs_balls": "2.2",
"four": 2,
"index": 1,
"six": 1,
"dismissed": false,
"player_b_four": 2,
"start_over": "0.1",
"end_over": "2.2",
"innings": "1",
"player_b_runs": 19,
"player_b_six": 1,
"player_b_balls": 10,
"runs": 22,
"balls": 14,
"player_b": "m_hussey",
"player_a": "m_vijay",
"player_a_balls": 4,
"last_ball": "29fdf8bd-57dd-4ed6-982b-033662310923",
"player_a_runs": 3,
"match": "iplt20_2013_g30",
"team": "a",
"run_rate": "9.43"
},
{
"player_a_six": 0,
"player_a_four": 0,
"first_ball": "777c4f5e-a00d-4ca8-9827-351305db096e",
"overs_balls": "10.1",
"four": 9,
"index": 2,
"six": 2,
"dismissed": true,
"player_b_four": 5,
"start_over": "2.3",
"end_over": "12.3",
"innings": "1",
"player_b_runs": 36,
"player_b_six": 0,
"player_b_balls": 26,
"runs": 90,
"balls": 61,
"player_b": "m_hussey",
"player_a": "m_vijay",
"player_a_balls": 1,
"last_ball": "e826e804-5b8c-4fd2-8771-d2257348f976",
"player_a_runs": 0,
"match": "iplt20_2013_g30",
"team": "a",
"run_rate": "8.85"
},
{
"player_a_six": 0,
"player_a_four": 0,
"first_ball": "69a04225-ed8a-45ba-96af-a1ab8a5ae89e",
"overs_balls": "3.3",
"four": 6,
"index": 3,
"six": 0,
"dismissed": true,
"player_b_four": 6,
"start_over": "12.4",
"end_over": "15.6",
"innings": "1",
"player_b_runs": 33,
"player_b_six": 0,
"player_b_balls": 15,
"runs": 42,
"balls": 21,
"player_b": "m_hussey",
"player_a": "s_raina",
"player_a_balls": 1,
"last_ball": "bf356a48-5701-4d7a-abb0-025566679a1e",
"player_a_runs": 0,
"match": "iplt20_2013_g30",
"team": "a",
"run_rate": "12.00"
},
{
"player_a_six": 0,
"player_a_four": 0,
"first_ball": "7106a8a0-021e-4049-807d-76debe55ac51",
"overs_balls": "1.2",
"four": 0,
"index": 4,
"six": 0,
"dismissed": true,
"player_b_four": 0,
"start_over": "16.1",
"end_over": "16.2",
"innings": "1",
"player_b_runs": 0,
"player_b_six": 0,
"player_b_balls": 0,
"runs": 0,
"balls": 2,
"player_b": "m_hussey",
"player_a": "ms_dhoni",
"player_a_balls": 1,
"last_ball": "5ab8afc4-a9eb-4b86-8a4b-41cf8a69af7e",
"player_a_runs": 0,
"match": "iplt20_2013_g30",
"team": "a",
"run_rate": "0.00"
},
{
"player_a_six": 0,
"player_a_four": 0,
"first_ball": "c88b4bba-adf7-4de1-bf86-cc7b5d5e69ed",
"overs_balls": "2.3",
"four": 1,
"index": 5,
"six": 0,
"dismissed": true,
"player_b_four": 1,
"start_over": "16.3",
"end_over": "18.5",
"innings": "1",
"player_b_runs": 15,
"player_b_six": 0,
"player_b_balls": 9,
"runs": 21,
"balls": 15,
"player_b": "ms_dhoni",
"player_a": "r_jadeja",
"player_a_balls": 1,
"last_ball": "8456c578-31e0-41fe-a3ef-aef99dca68f3",
"player_a_runs": 0,
"match": "iplt20_2013_g30",
"team": "a",
"run_rate": "8.40"
},
{
"player_a_six": 0,
"player_a_four": 0,
"first_ball": "81248550-5945-4b4d-80be-bf7fbec1b607",
"overs_balls": "1.0",
"four": 0,
"index": 6,
"six": 1,
"dismissed": true,
"player_b_four": 0,
"start_over": "18.6",
"end_over": "19.5",
"innings": "1",
"player_b_runs": 10,
"player_b_six": 1,
"player_b_balls": 4,
"runs": 11,
"balls": 6,
"player_b": "d_bravo",
"player_a": "ms_dhoni",
"player_a_balls": 1,
"last_ball": "161e36fd-0821-4697-affb-c99e0a45a66e",
"player_a_runs": 0,
"match": "iplt20_2013_g30",
"team": "a",
"run_rate": "11.00"
}
]
},
"b_2": {
"batting_order": [
"s_watson",
"a_rahane",
"d_yagnik",
"r_dravid",
"s_binny",
"b_hodge"
],
"runs": 185,
"balls": 120,
"fall_of_wickets": [
"AM Rahane at 71 runs, in 7.2 over",
"DH Yagnik at 84 runs, in 9.3 over",
"RS Dravid at 113 runs, in 13.2 over",
"SR Watson at 159 runs, in 17.3 over"
],
"wide": 0,
"run_rate": "9.25",
"fours": 12,
"run_str": "185/4 in 20.0",
"wickets": 4,
"wicket_order": [
"a_rahane",
"d_yagnik",
"r_dravid",
"s_watson"
],
"extras": 10,
"bowling_order": [
"a_chandila",
"r_shukla",
"j_faulkner",
"k_cooper",
"s_trivedi",
"s_watson",
"s_binny"
],
"key": "b_1",
"noball": 0,
"sixes": 7,
"legbye": 0,
"bye": 0,
"overs": "20.0",
"dotballs": 30,
"partnerships": [
{
"player_a_six": 3,
"player_a_four": 5,
"first_ball": "bfee9a98-76a9-4959-b1cb-638989c96bff",
"overs_balls": "7.1",
"four": 6,
"index": 1,
"six": 3,
"dismissed": false,
"player_b_four": 1,
"start_over": "0.1",
"end_over": "7.1",
"innings": "1",
"player_b_runs": 16,
"player_b_six": 0,
"player_b_balls": 14,
"runs": 71,
"balls": 43,
"player_b": "a_rahane",
"player_a": "s_watson",
"player_a_balls": 29,
"last_ball": "4825aad2-25d8-434c-86bb-11f8eedbdc4f",
"player_a_runs": 54,
"match": "iplt20_2013_g30",
"team": "b",
"run_rate": "9.91"
},
{
"player_a_six": 0,
"player_a_four": 0,
"first_ball": "c7351d98-9012-4361-ba2a-f5cd8665587d",
"overs_balls": "2.1",
"four": 1,
"index": 2,
"six": 0,
"dismissed": true,
"player_b_four": 0,
"start_over": "7.2",
"end_over": "9.2",
"innings": "1",
"player_b_runs": 4,
"player_b_six": 0,
"player_b_balls": 5,
"runs": 13,
"balls": 13,
"player_b": "s_watson",
"player_a": "a_rahane",
"player_a_balls": 1,
"last_ball": "c4134225-b057-4a43-9e0f-cd227b377540",
"player_a_runs": 0,
"match": "iplt20_2013_g30",
"team": "b",
"run_rate": "6.00"
},
{
"player_a_six": 0,
"player_a_four": 0,
"first_ball": "17d6fc7f-d37e-45ee-9b0a-aaf15221d8c4",
"overs_balls": "3.5",
"four": 1,
"index": 3,
"six": 1,
"dismissed": true,
"player_b_four": 1,
"start_over": "9.3",
"end_over": "13.1",
"innings": "1",
"player_b_runs": 21,
"player_b_six": 1,
"player_b_balls": 14,
"runs": 29,
"balls": 23,
"player_b": "s_watson",
"player_a": "d_yagnik",
"player_a_balls": 1,
"last_ball": "cf9137bb-9fd7-49c1-9fdc-3e5c8492ee3b",
"player_a_runs": 0,
"match": "iplt20_2013_g30",
"team": "b",
"run_rate": "7.57"
},
{
"player_a_six": 0,
"player_a_four": 0,
"first_ball": "0ea39992-7647-4916-bfcc-b2beba9dbf00",
"overs_balls": "4.1",
"four": 2,
"index": 4,
"six": 2,
"dismissed": true,
"player_b_four": 0,
"start_over": "13.2",
"end_over": "17.2",
"innings": "1",
"player_b_runs": 22,
"player_b_six": 2,
"player_b_balls": 12,
"runs": 46,
"balls": 25,
"player_b": "s_watson",
"player_a": "r_dravid",
"player_a_balls": 1,
"last_ball": "2eaaa026-485f-493c-9a70-551abc2bb83c",
"player_a_runs": 0,
"match": "iplt20_2013_g30",
"team": "b",
"run_rate": "11.04"
},
{
"player_a_six": 0,
"player_a_four": 0,
"first_ball": "4720b7ff-e963-4bc8-9138-6124c2b261fc",
"overs_balls": "2.4",
"four": 2,
"index": 5,
"six": 1,
"dismissed": true,
"player_b_four": 1,
"start_over": "17.3",
"end_over": "19.6",
"innings": "1",
"player_b_runs": 16,
"player_b_six": 1,
"player_b_balls": 9,
"runs": 26,
"balls": 16,
"player_b": "s_binny",
"player_a": "s_watson",
"player_a_balls": 1,
"last_ball": "76481b09-e7e4-4097-9e88-b6884f069082",
"player_a_runs": 0,
"match": "iplt20_2013_g30",
"team": "b",
"run_rate": "9.75"
}
]
}
},
"title": "Chennai Super Kings vs Rajasthan Royals - 30th Match - IPL T20 2013",
"dl_applied": false,
}
在这里,我想得到如下结果

{
    "innings": [ 
       {
          "name":"b_1",
          "batting_order": [
"s_watson",
"a_rahane",
"d_yagnik",
"r_dravid",
"s_binny",
"b_hodge"
],
       },
       {
         "name":"a_1",
         "batting_order": [
"s_watson",
"a_rahane",
"d_yagnik",
"r_dravid",
"s_binny",
"b_hodge"
],
       }
    ]
}
在android中如何将innings对象转换为JSONArray


请帮我解决这个问题。

首先,您的Json数据看起来非常复杂,没有明确的分类,这将使您的工作复杂化,如果您可以访问这些数据的后端,请尝试使它们更清晰,以简化您的工作

第二,要将数据更改为数组,首先需要将它们作为Json对象,以防使用字符串格式的数据

JSONObject object = new JSONObject(JsonString);
最后,要将对象转换为数组,请使用

JSONArray channelList = object.getJSONArray("Key word");
确保使用适当的关键字来获得正确的数组。例如,在您的案例中,如果您使用“b_1”作为关键字,您将得到 “击球顺序”:[ “s_watson”, “a_rahane”, “d_yagnik”, “r_dravid”, “s_binny”, “b_hodge” ] 作为数组中的第一个元素,“runs”:185将是第二个元素,依此类推。

尝试以下操作:

代码:

ArrayList innings_list=新的ArrayList()

JSONArray jsonarrayinings=new JSONArray();
JSONObject objectings=新的JSONObject();
试一试{
JSONObject myObject=新的JSONObject(“您的JSOn”);
JSONObject innings=myObject.getJSONObject(“innings”);
迭代器iter=innings.keys();
while(iter.hasNext()){
String key=iter.next();
Log.e(“因宁斯基”,钥匙);
试一试{
JSONObject对象=innings.getJSONObject(键);
JSONObject objectKey=新的JSONObject();
objectKey.put(“名称”,key);
JSONArray JSONArrayBatting_order=object.getJSONArray(“batting_order”);
objectKey.put(“batting_order”,JSONArrayBatting_order);
Log.e(“objectKey”,objectKey.toString());
jsonarrayinings.put(objectKey);
Log.e(“objectKey”,objectKey.toString());
}捕获(JSONException e){
//出了点问题!
}
}
反对。投(局),JSONArrayinings;
Log.e(“objectings”,objectings.toString());
}捕获(JSONException e){
e、 printStackTrace();
}
}

您的第一个json错误。请在这里检查您的json的可能副本是否无效…您的问题不清楚,请进一步解释。如果您希望将此json分配给Gson。你可以参考这个,@Mohit它不是重复的。试着先理解我的帖子。我想把整局的对象转换成JSONArray。我还发布了示例。
    JSONArray jsonArrayInnings = new JSONArray();
    JSONObject objectInnings = new JSONObject();
    try {


        JSONObject myObject = new JSONObject(" Your JSOn");


        JSONObject innings = myObject.getJSONObject("innings");
        Iterator<String> iter = innings.keys();

        while (iter.hasNext()) {
            String key = iter.next();
            Log.e("inningskey", key);
            try {


                JSONObject object = innings.getJSONObject(key);

                JSONObject objectKey = new JSONObject();
                objectKey.put("name", key);


                JSONArray jsonArrayBbatting_order = object.getJSONArray("batting_order");


                objectKey.put("batting_order", jsonArrayBbatting_order);
                    Log.e(" objectKey ", objectKey.toString());



                jsonArrayInnings.put(objectKey);
                    Log.e(" objectKey ", objectKey.toString());

            } catch (JSONException e) {
                // Something went wrong!
            }
        }
        objectInnings.put("innings",jsonArrayInnings);
            Log.e("objectInnings ", objectInnings.toString());

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


}