从JSON中提取

时间:2017-10-28 12:51:26

标签: java json parsing iterator



"biodata": {
    "Ruby": {
      "Expertise": "web development",
      "EXperience": "5 years"
    },
    "Dylon": {
      "Expertise": "Java",
      "EXperience": "2 years"
    }
 }




我有上面的JSONObject。我想在这里取一些钥匙。

  1. 我希望获取名称密钥,即Ruby,Dylon等。
  2. 然后我试图获取"体验"核心价值 。
  3. 期望的输出:

    name = Ruby
    经验= 5年

    我的代码:

    
    
    JSONParser parser = new JSONParser();
    
    Object obj = parser.parse(new FileReader("path to JSON file"));
    
    JSONObject jsonobj = (JSONObject) obj;
    
    String statistics = jsonobj.getString("biodata"); //The method getString(String) is undefined for the type JSONObject
    
    for (Iterator key = jsonobj.keys(); itr.hasNext();) {//The method keys() is undefined for the type JSONObject //itr cannot be resolved
         JSONObject name = jsonobj.get(key.next()); //Type mismatch: cannot convert from Object to JSONObject		
         String key = key.next();//The method next() is undefined for the type String
         JSONObject name = jsonobj.get(key); //Type mismatch: cannot convert from Object to JSONObject
         Log.d("data", "key="+key+ " and value="+jsonobj.toString()); //Log cannot be resolved		
    }
    
    
    

    我在代码的评论中提到了错误。

2 个答案:

答案 0 :(得分:1)

您的代码中存在许多问题。

首先:假设您要根据当前的JSON字符串实现代码

的问题:

  1. JSONObject API不支持您在实施中使用的Map方法。

  2. 您的JSON字符串不是数组,因此for循环不会有帮助,而是应该使用JSONObject API的getJSONObject()方法获取内部JSONObjects。

  3. 从解析器API中转换解析后的对象不会自动使其成为JSONObject,正确的方法如下所示:

    JsonObject jsonObject = parser.parse(new FileReader(“JSON文件的路径”))。getAsJsonObject();

  4. 第二次:假设您打算将JSON字符串表示形式实现为数组,则应更正下面的JSON字符串。

    // RESULT!
    // From the console:
    // first then:  10
    // second then:  20
    // last then:  40
    

    使用上述JSON字符串,您可以使用JSONArray API

    实现数据逻辑的提取

答案 1 :(得分:1)

你json无效。

你应该改变这个。

{ 
 "biodata": {
    "Ruby": {
      "Expertise": "web development",
      "EXperience": "5 years"
    },
    "Dylon": {
      "Expertise": "Java",
      "EXperience": "2 years"
    }
 }
}

试试这个。

private void jsonParse() {
    try {
        // use jsonobject to parse json with 
        JSONParser parser = new JSONParser();

        Object obj = parser.parse(new FileReader("path to JSON file"));

        JSONObject jsonObject = (JSONObject) obj;

        // get jsonobject by biodata tag
        JSONObject biodata = jsonObject.getJSONObject("biodata");
        // use Iterator to get name 
        Iterator<String> names = biodata.keys();
        // use while loop
        while (names.hasNext()) {
            // get name 
            String name = names.next().toString();
            Log.d("data", "name=" + name);
            // get jsonobject by name tag 
            JSONObject nameJsonObject = biodata.getJSONObject(name);
            // get string 
            String Expertise = nameJsonObject.getString("Expertise");
            String EXperience = nameJsonObject.getString("EXperience");
            Log.d("data", "Experience =" + EXperience);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
}