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

我有上面的JSONObject。我想在这里取一些钥匙。
期望的输出:
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
}

我在代码的评论中提到了错误。
答案 0 :(得分:1)
您的代码中存在许多问题。
首先:假设您要根据当前的JSON字符串实现代码
的问题:
JSONObject API不支持您在实施中使用的Map方法。
您的JSON字符串不是数组,因此for循环不会有帮助,而是应该使用JSONObject API的getJSONObject()方法获取内部JSONObjects。
从解析器API中转换解析后的对象不会自动使其成为JSONObject,正确的方法如下所示:
JsonObject jsonObject = parser.parse(new FileReader(“JSON文件的路径”))。getAsJsonObject();
第二次:假设您打算将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();
}
}