【问题标题】:JSON parsing with dynamic JSON object name?使用动态 JSON 对象名称解析 JSON?
【发布时间】:2014-12-09 11:50:23
【问题描述】:

我知道 JSON 解析,但在我当前的项目中,我得到了一些不同类型的 JSON 格式,其中所有对象的名称都是动态的,并且它们可能会发生变化。

{
    "category_id": "1",
    "parent_id": "0",
    "name": "Root Catalog",
    "is_active": null,
    "position": "0",
    "level": "0",
    "children": {
        "0": {
            "category_id": "2",
            "parent_id": "1",
            "name": "Default Category",
            "is_active": "1",
            "position": "1",
            "level": "1",
            "children": {
                "0": {
                    "category_id": "32",
                    "parent_id": "2",
                    "name": "Services",
                    "is_active": "1",
                    "position": "1",
                    "level": "2",
                    "children": {
                        "0": {
                            "category_id": "20",
                            "parent_id": "32",
                            "name": "Makeup",
                            "is_active": "1",
                            "position": "1",
                            "level": "3",
                            "children": {
                                "0": {
                                    "category_id": "22",
                                    "parent_id": "20",
                                    "name": "Bridal Makeup",
                                    "is_active": "1",
                                    "position": "1",
                                    "level": "4",
                                    "children": {

                                    }
                                },
                                "1": {
                                    "category_id": "23",
                                    "parent_id": "20",
                                    "name": "General Makeup",
                                    "is_active": "1",
                                    "position": "2",
                                    "level": "4",
                                    "children": {

                                    }
                                }
                            }
                        },
                        "1": {
                            "category_id": "21",
                            "parent_id": "32",
                            "name": "Skin Services",
                            "is_active": "1",
                            "position": "2",
                            "level": "3",
                            "children": {
                                "0": {
                                    "category_id": "24",
                                    "parent_id": "21",
                                    "name": "Bleach",
                                    "is_active": "1",
                                    "position": "1",
                                    "level": "4",
                                    "children": {

                                    }
                                },
                                "1": {
                                    "category_id": "25",
                                    "parent_id": "21",
                                    "name": "Cleanup",
                                    "is_active": "1",
                                    "position": "2",
                                    "level": "4",
                                    "children": {

                                    }
                                },
                                "2": {
                                    "category_id": "26",
                                    "parent_id": "21",
                                    "name": "General Facials",
                                    "is_active": "1",
                                    "position": "3",
                                    "level": "4",
                                    "children": {

                                    }
                                },
                                "3": {
                                    "category_id": "27",
                                    "parent_id": "21",
                                    "name": "Masks",
                                    "is_active": "1",
                                    "position": "4",
                                    "level": "4",
                                    "children": {

                                    }
                                },
                                "4": {
                                    "category_id": "28",
                                    "parent_id": "21",
                                    "name": "Special Facials",
                                    "is_active": "1",
                                    "position": "5",
                                    "level": "4",
                                    "children": {

                                    }
                                },
                                "5": {
                                    "category_id": "29",
                                    "parent_id": "21",
                                    "name": "Threading",
                                    "is_active": "1",
                                    "position": "6",
                                    "level": "4",
                                    "children": {

                                    }
                                },
                                "6": {
                                    "category_id": "30",
                                    "parent_id": "21",
                                    "name": "Waxing",
                                    "is_active": "1",
                                    "position": "7",
                                    "level": "4",
                                    "children": {

                                    }
                                },
                                "7": {
                                    "category_id": "38",
                                    "parent_id": "21",
                                    "name": "Special Services",
                                    "is_active": "1",
                                    "position": "8",
                                    "level": "4",
                                    "children": {

                                    }
                                },
                                "8": {
                                    "category_id": "40",
                                    "parent_id": "21",
                                    "name": "Lip Care",
                                    "is_active": "1",
                                    "position": "9",
                                    "level": "4",
                                    "children": {

                                    }
                                },
                                "9": {
                                    "category_id": "41",
                                    "parent_id": "21",
                                    "name": "Eye Care",
                                    "is_active": "1",
                                    "position": "10",
                                    "level": "4",
                                    "children": {

                                    }
                                }
                            }
                        },
                        "2": {
                            "category_id": "3",
                            "parent_id": "32",
                            "name": "Body Services",
                            "is_active": "1",
                            "position": "3",
                            "level": "3",
                            "children": {
                                "0": {
                                    "category_id": "4",
                                    "parent_id": "3",
                                    "name": "Body Wraps",
                                    "is_active": "1",
                                    "position": "1",
                                    "level": "4",
                                    "children": {

                                    }
                                },
                                "1": {
                                    "category_id": "5",
                                    "parent_id": "3",
                                    "name": "Reflexology",
                                    "is_active": "1",
                                    "position": "2",
                                    "level": "4",
                                    "children": {

                                    }
                                },
                                "2": {
                                    "category_id": "6",
                                    "parent_id": "3",
                                    "name": "Special Body Services",
                                    "is_active": "1",
                                    "position": "3",
                                    "level": "4",
                                    "children": {

                                    }
                                }
                            }
                        },
                        "3": {
                            "category_id": "7",
                            "parent_id": "32",
                            "name": "Hair Services",
                            "is_active": "1",
                            "position": "4",
                            "level": "3",
                            "children": {
                                "0": {
                                    "category_id": "8",
                                    "parent_id": "7",
                                    "name": "Chemical Treatments",
                                    "is_active": "0",
                                    "position": "1",
                                    "level": "4",
                                    "children": {

                                    }
                                },
                                "1": {
                                    "category_id": "42",
                                    "parent_id": "7",
                                    "name": "Hair Extensions",
                                    "is_active": "1",
                                    "position": "2",
                                    "level": "4",
                                    "children": {

                                    }
                                },
                                "2": {
                                    "category_id": "9",
                                    "parent_id": "7",
                                    "name": "Hair Color",
                                    "is_active": "1",
                                    "position": "3",
                                    "level": "4",
                                    "children": {

                                    }
                                },
                                "3": {
                                    "category_id": "10",
                                    "parent_id": "7",
                                    "name": "Haircut",
                                    "is_active": "1",
                                    "position": "4",
                                    "level": "4",
                                    "children": {

                                    }
                                },
                                "4": {
                                    "category_id": "11",
                                    "parent_id": "7",
                                    "name": "Hair Straightening",
                                    "is_active": "1",
                                    "position": "5",
                                    "level": "4",
                                    "children": {

                                    }
                                },
                                "5": {
                                    "category_id": "12",
                                    "parent_id": "7",
                                    "name": "Hair Styling",
                                    "is_active": "1",
                                    "position": "6",
                                    "level": "4",
                                    "children": {

                                    }
                                },
                                "6": {
                                    "category_id": "13",
                                    "parent_id": "7",
                                    "name": "Hair Treatments",
                                    "is_active": "1",
                                    "position": "7",
                                    "level": "4",
                                    "children": {

                                    }
                                },
                                "7": {
                                    "category_id": "14",
                                    "parent_id": "7",
                                    "name": "Other Hair Services",
                                    "is_active": "1",
                                    "position": "8",
                                    "level": "4",
                                    "children": {

                                    }
                                },
                                "8": {
                                    "category_id": "15",
                                    "parent_id": "7",
                                    "name": "Special Hair Services",
                                    "is_active": "1",
                                    "position": "9",
                                    "level": "4",
                                    "children": {

                                    }
                                }
                            }
                        },
                        "4": {
                            "category_id": "16",
                            "parent_id": "32",
                            "name": "Hands And Feet",
                            "is_active": "1",
                            "position": "5",
                            "level": "3",
                            "children": {
                                "0": {
                                    "category_id": "17",
                                    "parent_id": "16",
                                    "name": "Manicure",
                                    "is_active": "1",
                                    "position": "1",
                                    "level": "4",
                                    "children": {

                                    }
                                },
                                "1": {
                                    "category_id": "18",
                                    "parent_id": "16",
                                    "name": "Nail Art",
                                    "is_active": "1",
                                    "position": "2",
                                    "level": "4",
                                    "children": {

                                    }
                                },
                                "2": {
                                    "category_id": "19",
                                    "parent_id": "16",
                                    "name": "Pedicure",
                                    "is_active": "1",
                                    "position": "3",
                                    "level": "4",
                                    "children": {

                                    }
                                }
                            }
                        }
                    }
                },
                "1": {
                    "category_id": "33",
                    "parent_id": "2",
                    "name": "Memberships",
                    "is_active": "1",
                    "position": "2",
                    "level": "2",
                    "children": {

                    }
                },
                "2": {
                    "category_id": "34",
                    "parent_id": "2",
                    "name": "Packages",
                    "is_active": "1",
                    "position": "3",
                    "level": "2",
                    "children": {

                    }
                },
                "3": {
                    "category_id": "35",
                    "parent_id": "2",
                    "name": "Offers",
                    "is_active": "1",
                    "position": "4",
                    "level": "2",
                    "children": {

                    }
                },
                "4": {
                    "category_id": "36",
                    "parent_id": "2",
                    "name": "Customer Reviews",
                    "is_active": "1",
                    "position": "5",
                    "level": "2",
                    "children": {

                    }
                },
                "5": {
                    "category_id": "37",
                    "parent_id": "2",
                    "name": "Gallery",
                    "is_active": "1",
                    "position": "6",
                    "level": "2",
                    "children": {

                    }
                },
                "6": {
                    "category_id": "31",
                    "parent_id": "2",
                    "name": "Contact us",
                    "is_active": "1",
                    "position": "7",
                    "level": "2",
                    "children": {

                    }
                }
            }
        }
    }
}

所以在doInBackground(),我的做法如下:-

@Override
protected String doInBackground(String... params) {

    ServiceHandler serviceHandler = new ServiceHandler();
    String jsonStr = serviceHandler.makeServiceCall(
            Constants.SIDE_DRAWER_SERVICES, ServiceHandler.GET);
    try {
        JSONObject jobj = new JSONObject(jsonStr);
        Log.d("", "" + jsonStr.toString());
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return jsonStr;
}

在字符串“jsonStr”中,我得到了完整的数据作为响应,但是当将其转换为 JSONObject 时,例如“JSONObject jobj = new JSONObject(jsonStr);”我缺少这样的数据:-

{
    "position": "0",
    "children": {
        "0": {
            "position": "1",
            "children": {
                "3": {
                    "position": "4",
                    "children": {

                    },
                    "category_id": "35",
                    "level": "2",
                    "is_active": "1",
                    "name": "Offers",
                    "parent_id": "2"
                },
                "2": {
                    "position": "3",
                    "children": {

                    },
                    "category_id": "34",
                    "level": "2",
                    "is_active": "1",
                    "name": "Packages",
                    "parent_id": "2"
                },
                "1": {
                    "position": "2",
                    "children": {

                    },
                    "category_id": "33",
                    "level": "2",
                    "is_active": "1",
                    "name": "Memberships",
                    "parent_id": "2"
                },
                "0": {
                    "position": "1",
                    "children": {
                        "3": {
                            "position": "4",
                            "children": {
                                "3": {
                                    "position": "4",
                                    "children": {

                                    },
                                    "category_id": "10",
                                    "level": "4",
                                    "is_active": "1",
                                    "name": "Haircut",
                                    "parent_id": "7"
                                },
                                "2": {
                                    "position": "3",
                                    "children": {

                                    },
                                    "category_id": "9",
                                    "level": "4",
                                    "is_active": "1",
                                    "name": "Hair Color",
                                    "parent_id": "7"
                                },
                                "1": {
                                    "position": "2",
                                    "children": {

                                    },
                                    "category_id": "42",
                                    "level": "4",
                                    "is_active": "1",
                                    "name": "Hair Extensions",
                                    "parent_id": "7"
                                },
                                "0": {
                                    "position": "1",
                                    "children": {

                                    },
                                    "category_id": "8",
                                    "level": "4",
                                    "is_active": "0",
                                    "name": "Chemical Treatments",
                                    "parent_id": "7"
                                },
                                "7": {
                                    "position": "8",
                                    "children": {

                                    },
                                    "category_id": "14",
                                    "level": "4",
                                    "is_active": "1",
                                    "name": "Other Hair Services",
                                    "parent_id": "7"
                                },
                                "6": {
                                    "position": "7",
                                    "children": {

                                    },
                                    "category_id": "13",
                                    "level": "4",
                                    "is_active": "1",
                                    "name": "Hair Treatments",
                                    "parent_id": "7"
                                },
                                "5": {
                                    "position": "6",
                                    "children": {

                                    },
                                    "category_id": "12",
                                    "level": "4",
                                    "is_active": "1",
                                    "name": "Hair Styling",
                                    "parent_id": "7"
                                },
                                "4": {
                                    "position": "5",
                                    "children": {

                                    },
                                    "category_id": "11",
                                    "level": "4",
                                    "is_active": "1",
                                    "name": "Hair Straightening",
                                    "parent_id": "7"
                                },
                                "8": {
                                    "position": "9",
                                    "children": {

                                    },
                                    "category_id": "15",
                                    "level": "4",
                                    "is_active": "1",
                                    "name": "Special Hair Services",
                                    "parent_id": "7"
                                }
                            },
                            "category_id": "7",
                            "level": "3",
                            "is_active": "1",
                            "name": "Hair Services",
                            "parent_id": "32"
                        },
                        "2": {
                            "position": "3",
                            "children": {
                                "2": {
                                    "position": "3",
                                    "children": {

                                    },
                                    "category_id": "6",
                                    "level": "4",
                                    "is_active": "1",
                                    "name": "Special Body Services",
                                    "parent_id": "3"
                                },
                                "1": {
                                    "position": "2",
                                    "children": {

                                    },

我不知道我的 JSON 发生了什么。请帮助我并告诉我 JSON 是否无效。

【问题讨论】:

  • 我认为您的 json 响应正确,并且在将其更改为 json 对象后重新排序。由于 json 对象是无序的,所以它自然是无序的。
  • 那么我丢失的数据呢,我该如何解析呢?
  • 你怎么知道数据丢失了,如果你使用 logcat 打印数据它只打印一些行。
  • 是的,在 logcate 中我没有得到所有 JSON Objects ,这就是我感到困惑的原因。请消除我的困惑。
  • 在下面试试我的答案。

标签: android json jsonobject


【解决方案1】:

终于找到解决办法了,在调试的时候,字符串显示所有数据不管多少,但是在JSONObject中所有数据都可用但调试时不显示。当从JSONObject中检索数据时我获取了调试器中未显示的所有字段。

【讨论】:

    【解决方案2】:

    要解析的示例 JSON 文件

    [
        {
    
            "Language": "Afrikaans",
            "Native_Language": "Afrikaans",
            "code": "af"
        },
    
        {
            "Language": "Somali",
            "Native_Language": "af Soomaali",
            "code": "so"
        },
        {
            "Language": "Arabic",
            "Native_Language": "(al arabiya) العربية",
            "code": "ar"
        },
        {
            "Language": "Azerbaijani",
            "Native_Language": "Azərbaycan",
            "code": "az"
        }
    ]
    

    以及解析上述 JSON 文件的 Android 代码。这项工作根据您的 json 响应完美更改。

    package com.example.jsonparsing;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import android.os.Bundle;
    import android.support.v7.app.ActionBarActivity;
    
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    
    
    public class MainActivity extends ActionBarActivity {
    
        private ListView listViewLanguages;
        ArrayList<String> languageArray  = new ArrayList<String>();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            listViewLanguages =(ListView)findViewById(R.id.languages);
            //===========================Reading Json File===================================//
            StringBuffer buffer = new StringBuffer();
            BufferedReader reader;
            try {
                reader = new BufferedReader(new InputStreamReader(getAssets().open("languagesupdated.json")));
                String readData;
                while((readData = reader.readLine()) != null)
                {
                    buffer.append(readData);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            //===========================Getting Json Element===================================//
            String languageName;
            JSONArray array = null;
            try {
                array = new JSONArray(buffer.toString());
                for (int i = 0; i < array.length(); i++) {
                    JSONObject jsonObject  = array.getJSONObject(i);
                    languageName = jsonObject.getString("Language");
                    languageArray.add(languageName);
    
                    }
            } catch (JSONException e) {
                e.printStackTrace();
            }
            //===========================GettingListView===================================//
              ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, languageArray);
              //listViewLanguages.setBackgroundColor(new ColorDrawable));
              listViewLanguages.setAdapter(adapter);
    
    
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            int id = item.getItemId();
            if (id == R.id.action_settings) {
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
    }
    

    【讨论】:

      【解决方案3】:

      您的 logcat 仅显示一些数据行,因此请使用此功能打印数据。

      打电话给longInfo(your_big_string);

      public static void longInfo(String str) {
          if(str.length() > 4000) {
              Log.i(TAG, str.substring(0, 4000));
              longInfo(str.substring(4000));
          } else
              Log.i(TAG, str);
      }
      

      【讨论】:

      • 实际上,当我在进行调试时,我仍然没有得到丢失的 JSON 数据。主要问题是这个。所以我很困惑我丢失的数据在哪里。请帮帮我。
      • 在浏览器中尝试您的网址,是否提供所有数据。
      • 是的,在浏览器中我得到了正确的回复。实际上,当我在 try 块中并将字符串转换为 JSON 对象时,我的内容就丢失了。语句为“JSONObject jobj = new JSONObject(jsonStr);”
      • 我没有听说过 json 块数据,确保整个响应在 { } 内,然后通过上述方法尝试 logcat 响应和转换 json 后您可以了解那里发生了什么.
      • 这很奇怪,但是当我调用“longInfo(jobj.toString());”时在尝试块然后仍然在 logcate 我得到了相同的答复。我的数据丢失了....;(
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 2022-08-20
      • 2015-11-27
      相关资源
      最近更新 更多