Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.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
Android 无法在LinkedHashMap的Arraylist中获取JSON响应_Android_Json - Fatal编程技术网

Android 无法在LinkedHashMap的Arraylist中获取JSON响应

Android 无法在LinkedHashMap的Arraylist中获取JSON响应,android,json,Android,Json,我有来自服务器的这种类型的JSON响应 { "Field1": { "Field Name": "Phone Number", "Field Type": "Number", "Validation": { "Min": "10", "Max": "12" } }, "Field2": { "Field Name": "Email",

我有来自服务器的这种类型的JSON响应

{
    "Field1": {
        "Field Name": "Phone Number",
        "Field Type": "Number",
        "Validation": {
            "Min": "10",
            "Max": "12"
        }
    },
    "Field2": {
        "Field Name": "Email",
        "Field Type": "String",
        "Validation": {
            "Regular Expression": "XltfQS1aYS16MC05LVxcK10rKFxcLltfQS1aYS16MC05LV0rKSpAIiAJCSsgIltBLVphLXowLTktXSsoXFwuW0EtWmEtejAtOV0rKSooXFwuW0EtWmEtel17Mix9KSQ=",
            "Min Length": "20",
            "Max Length": "50"
        }
    },
    "Field3": {
        "Field Name": "Amount",
        "Field Type": "Decimal",
        "Validation": {
            "Number Precesion": "2",
            "Min": "2",
            "Max": "4"
        }
    },
    "Field4": {
        "Field Name": "Date",
        "Field Type": "Date",
        "Validation": ""
    },
    "Field5": {
        "Field Name": "Date_and_Time",
        "Field Type": "Date And Time",
        "Validation": ""
    }
}
现在我想解析这个JSON响应,而不使用它的键名。 为此,我试过这样做:

public ArrayList<LinkedHashMap<String, String>> getDynamicFieldForBillPay() throws JSONException
    {
        ArrayList<LinkedHashMap<String, String>> allData = new ArrayList<LinkedHashMap<String, String>>();
        LinkedHashMap<String, String> dynamicValues = new LinkedHashMap<String, String>();

        String fieldInfo="";
        BillPayProduct billpay=new BillPayProduct();

        DataHelper datahelper=new DataHelper(context);
        billpay=datahelper.getBillPayProductInfo();

        fieldInfo=billpay.getFieldInfo();

        System.out.println(" $$$$   "+fieldInfo);
        String fieldName=null,fieldType=null;

        JSONObject json;
        JSONArray jsonarr;

        JSONObject parentObject = new JSONObject(fieldInfo);
        try
        {
            if (fieldInfo.startsWith("{")) 
            {
                json = new JSONObject(fieldInfo);
                Iterator<String> it = json.keys();
                while (it.hasNext()) 
                {
                    String key = it.next();
                    String value = json.getString(key);

                    System.out.println(" ^^^^ KEY==>"+key);
                    System.out.println(" ^^^^ VALUE==>"+value);
                    dynamicValues.put(key, value);
                }
                allData.add(dynamicValues);
            } 
            else if (fieldInfo.startsWith("[")) 
            {
                jsonarr = new JSONArray(fieldInfo);
                for (int i = 0; i < jsonarr.length(); i++) 
                {
                    dynamicValues = new LinkedHashMap<String, String>();
                    json = (JSONObject) jsonarr.get(i);
                    Iterator<String> it = json.keys();

                    while (it.hasNext()) 
                    {
                        String key = it.next();
                        String value = json.getString(key);
                        dynamicValues.put(key, value);
                    }

                    System.out.println(" *********** Value Added  ===>"+allData.add(dynamicValues));
                    allData.add(dynamicValues);
                }
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return allData;
    }
我想要每个值的输出

像键字段3一样,具有值

  • 最小值=2
  • 最大值=4
  • 字段类型=十进制等
同样,在解析结果并将其设置为linkedhash映射的Arraylist(不使用其键名)后,如何使用它

任何帮助都将被感激

提前感谢……:)

您可以使用来更轻松地解析
JSON

给定您的
String
JSON:
private String=“{…}”

试试看{
JSONObject json=$.parseJSON(字符串);
Map Map=$.Map(json);
for(条目:map.entrySet()){
JSONObject obj=(JSONObject)entry.getValue();
Map innerMap=$.Map(obj);
对于(条目innerEntry:innerMap.entrySet()){
Object val=innerEntry.getValue();
if(JSONObject的val instanceof){
对于(输入值:$.map((JSONObject)val).entrySet()){
System.out.println(value.getKey()+“=”+value.getValue());
}
}
否则{
System.out.println(innerEntry.getKey()+“=”+val);
}
}
}
}捕获(可丢弃的t){
t、 printStackTrace();
}

谢谢你的建议。但我不能那样做。我能用这种方法得到你的帮助以达到预期的效果吗?@AndroidLearner,你为什么不能用这种方法?这是一种快速有效的方法,并将代码量减少了十倍。但在我的项目中,由于一些限制,我无法应用此方法,我希望您能够理解…:)
KEY==>Field3

VALUE==>{"Validation":{"Number Precesion":"2","Max":"4","Min":"2"},"Field Type":"Decimal","Field Name":"Amount"}
KEY==>Field2
VALUE==>{"Validation":{"Min Length":"20","Regular Expression":"XltfQS1aYS16MC05LVxcK10rKFxcLltfQS1aYS16MC05LV0rKSpAIiAJCSsgIltBLVphLXowLTktXSsoXFwuW0EtWmEtejAtOV0rKSooXFwuW0EtWmEtel17Mix9KSQ=","Max Length":"50"},"Field Type":"String","Field Name":"Email"}

KEY==>Field5

VALUE==>{"Validation":"","Field Type":"Date And Time","Field Name":"Date_and_Time"}

KEY==>Field4
VALUE==>{"Validation":"","Field Type":"Date","Field Name":"Date"}

KEY==>Field1

VALUE==>{"Validation":{"Max":"12","Min":"10"},"Field Type":"Number","Field Name":"Phone Number"}
try {
    JSONObject json = $.parseJSON(string);
    Map<String, ?> map = $.map(json);
    for (Entry<String, ?> entry : map.entrySet()) {
        JSONObject obj = (JSONObject) entry.getValue();
        Map<String, ?> innerMap = $.map(obj);
        for (Entry<String, ?> innerEntry : innerMap.entrySet()) {
            Object val = innerEntry.getValue();
            if (val instanceof JSONObject) {
                for (Entry<String, ?> value : $.map((JSONObject) val).entrySet()) {
                    System.out.println(value.getKey() + " = " + value.getValue());
                }
            }
            else {
                System.out.println(innerEntry.getKey() + " = " + val);
            }
        }
    }
} catch (Throwable t) {
    t.printStackTrace();
}