根据对象名称获取json数据

时间:2018-01-23 09:55:36

标签: java json

对某些人来说,这可能是一项简单的任务。

我喜欢下面的json。

{
  "address": {
    "state": "World",
    "address": "infinite space, 000",
    "city": "Android city",
    "address2": {
      "state": "World2",
      "address": "infinite space2, 002",
      "city": "Android city2",
      "address3": {
        "state": "World3",
        "address": "infinite space3, 003",
        "city": "Android city3"
      }
    }
  },
  "valid": {
    "state": "World",
    "address": "infinite space, 000",
    "city": "Android city",
    "valid2": {
      "state": "World2",
      "address": "infinite space2, 002",
      "city": "Android city2",
      "valid3": {
        "state": "World3",
        "address": "infinite space3, 003",
        "city": "Android city3"
      }
    }
  }
}

这是一个示例结构。有时可能在一个对象内部有许多对象。我知道这是一种糟糕的JSON格式,但我只是通过使用它来实现我的要求:-(。

我的要求是:当我们将对象名称address3valid3发送给方法作为参数时。我的方法必须返回对象的keyvalue(我们作为参数传递)。任何人都知道,如何在Java中实现这一目标?

2 个答案:

答案 0 :(得分:0)

您可以解析JSON并将结果转换为HashMap<String,String>

以下是此JSON object的示例代码。

public HashMap<String,String> getKeyValuePairs(JSONObject json,String key){
          HashMap<String,String> jsonHashList=new  HashMap<String,String>();   
          JSONObject desiredJSON = json.get(key);
          Iterator<?> keys = desiredJSON.keys();
     while( keys.hasNext() ) {
        String key2 = (String)keys.next();
        if ( desiredJSON.get(key2) instanceof JSONObject ) {
               String value = desiredJSON.get(key2);
               jsonHashList.add(key2,value);
        }
    }

    return jsonHashList;
 }

注意:在这种情况下,假设键位于​​传递JSON的第一级,因此如果您想传递任何JSON来获取它的键值,则通过第一级JSON

答案 1 :(得分:0)

这是解决方案

private void parseJson(JSONObject jsonObject, String objName){

    try {

        for(int i = 0; i < jsonObject.length(); i++){


            if(jsonObject.get(jsonObject.names().getString(i)) instanceof JSONObject){

                JSONObject  singleObj = new JSONObject(jsonObject.get(jsonObject.names().getString(i)).toString());

                Iterator<String> keys= singleObj.keys();
                while (keys.hasNext()){

                    String keyValue = keys.next();
                    final String valueString = singleObj.getString(keyValue);

                    if(!isJSONObjectOrString(valueString)){

                        if(keyValue.contains(objName) || valueString.contains(objName)
                                || jsonObject.names().getString(i).contains(objName)){
                            Log.e("objectName", jsonObject.names().getString(i));
                            Log.e(keyValue, valueString);
                        }

                    }

                }

                parseJson(singleObj);
            }
        }

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

}