Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用不同结构处理JSON文件_Java_Android_Json - Fatal编程技术网

Java 使用不同结构处理JSON文件

Java 使用不同结构处理JSON文件,java,android,json,Java,Android,Json,我有一个android应用程序Java,可以处理来自te web的API 当前应用程序正在处理一个JSON文件,如下所示: { "contacts": [ { "id": 1, "name": "name1", "email": "email1", "phone": "1234567890" }, { "id": 2, ETC... "contacts": [

我有一个android应用程序Java,可以处理来自te web的API

当前应用程序正在处理一个JSON文件,如下所示:

{
"contacts": [
    {
        "id": 1, 
        "name": "name1", 
        "email": "email1", 
        "phone": "1234567890"
    }, 
    {
        "id": 2, 
        ETC... 
"contacts": [
    {...},
    {...},
    {...}
]
"contacts": {
    "1": {...}, 
    "2": {...},
    "3": {...}
}
我需要处理另一个JSON文件,但它的结构不同:

{
    "contacts": {
        "1": {
            "id": 1, 
            "name": "name1", 
            "email": "email1", 
            "phone": "1234567890", 
            "level1": {
                "level2": {
                    "level3": 3, 
                }
            }, 
            "last_updated": 20180712
        }, 
        "2": {
            ETC...
如何通过调整下面的代码来处理第二个JSON文件

    if (jsonSource != null) {
        try {
            JSONObject jsonObject = new JSONObject(jsonSource);
            JSONArray jsonArrayData = jsonObject.getJSONArray("contacts");

            for (int i = 0; i < jsonArrayData.length(); i++) {
                JSONObject contacts = jsonArrayData.getJSONObject(i);
                String id = contacts.getString("id");
                String name = contacts.getString("name");
                String email = contacts.getString("email");
                String phone = contacts.getString("phone");

                HashMap<String, String> values = new HashMap<>();
                values.put("id", id);
                values.put("name", name);
                values.put("email, email);
                values.put("phone, phone);
                contactList.add(values);
            }
        } catch (final JSONException e) {
            Log.e(TAG, "JSON parsing error: " + e.getMessage());
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(getContext(), "ERROR", Toast.LENGTH_LONG).show();
                }
            });
        }
    } else {
        Log.e(TAG, "Unable to retrieve JSON file from URL");
        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(getContext(), "ERROR", Toast.LENGTH_LONG).show();
            }
        });
    }
    return null;

非常感谢您的帮助

看起来,在第一个json中,联系人是对象数组,在第二个json中,联系人是对象数组。其中有其他对象,简化版本如下所示:

{
"contacts": [
    {
        "id": 1, 
        "name": "name1", 
        "email": "email1", 
        "phone": "1234567890"
    }, 
    {
        "id": 2, 
        ETC... 
"contacts": [
    {...},
    {...},
    {...}
]
"contacts": {
    "1": {...}, 
    "2": {...},
    "3": {...}
}
所以,您唯一的选择是手动检查联系人数组或对象,并根据它更改代码。 它看起来是这样的:

{
"contacts": [
    {
        "id": 1, 
        "name": "name1", 
        "email": "email1", 
        "phone": "1234567890"
    }, 
    {
        "id": 2, 
        ETC... 
"contacts": [
    {...},
    {...},
    {...}
]
"contacts": {
    "1": {...}, 
    "2": {...},
    "3": {...}
}
JSONObject JSONObject=新的JSONObject JSONSource; 如果jsonObject.getcontacts是jsonObject的实例{ JSONObject contactsJson=JSONObject.GetJSONObject Contacts; 对于迭代器,it=contactsJson.keys;it.hasNext{ String key=it.next; JSONObject contactJson=contactsJson.getJSONObject键; //处理联系人项目的代码 } }否则{ //处理每个联系人项目的代码 }