我有包含动态部分和静态部分的json文件,我的问题出在动态部分,因为我无法获取密钥,所以我更改为创建一个Java类来获取密钥。
我的文件是这样的:
[
{
"data": {
"1801": "1801_13",
"293954": "293954_1",
"293985": "noir",
"294071": "294071_3",
"ean": "5035915032563",
"Nature": "450"
},
"creation_date": "2018-08-28T12:25:06.638Z",
"update_date": "2018-08-28T12:32:55.640Z",
},
{
"data": {
"2633": "1801_13",
"293954": "293954_1",
"ean": "5035236232070",
"Nature": "301"
},
"creation_date": "2018-08-28T12:25:06.638Z",
"update_date": "2018-08-28T12:32:55.640Z",
} ]
data:动态部分,在这一部分中,我有两个静态键(ena和nature),其余的键都是动态的,例如本例。
我创建了这个java类:
package routines;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.simple.JSONObject;
import org.json.simple.parser.*;
public class getKeyFromFile {
public static void main(String filepath) throws ParseException, JSONException {
JSONParser parser = new JSONParser();
try {
Object obj = parser.parse(new FileReader( filepath));
JSONObject jsonObject = (JSONObject)obj ;
printJSON((JSONObject) jsonObject);
} catch (FileNotFoundException e) {
} catch (IOException ioe) {
}
}
public static void printJSON(JSONObject jsonObj) {
for (Object keyObj : jsonObj.keySet()) {
String key = (String)keyObj;
Object valObj = jsonObj.get(key);
if (valObj instanceof JSONObject) {
// call printJSON on nested object
printJSON((JSONObject) valObj);
} else {
// print key-value pair
System.out.println("key : "+key);
System.out.println("value : "+valObj.toString());
}
}
}}
我收到此错误:
java.lang.ClassCastException:不能强制转换org.json.simple.JSONArray 到org.json.JSONArray
答案 0 :(得分:0)
事物,首先,您的json格式错误。在两个元素的下一行末尾删除逗号。
"update_date": "2018-08-28T12:32:55.640Z",
第二,对象是一个数组,如错误消息中所示。因此,将您的代码更改为使用JSONArray而不是JSONObject
JSONArray jsonArray = (JSONArray) obj;
从那里,您必须修改打印功能以使用JSONArray
,并使用其他for循环遍历该循环。像这样的东西
for (Object json : jsonArray) {
printJSONOBject((JSONObject) json)
}
private void printJSONOBject(JSONObject jsonObject) {
for (Object keyObj : jsonObject.keySet()) {
String key = (String) keyObj;
Object valObj = jsonObject.get(key);
if (valObj instanceof JSONObject) {
printJSONOBject((JSONObject) valObj);
} else {
System.out.println(key + " : " + valObj);
}
}
}
答案 1 :(得分:0)
谢谢techtabu :) 此代码运行,但它复制了所有我的文件。 我不想在结果中看到对象数据。 我想要:
document.querySelector("a").click();
第二行:
1801 : 1801_13,
293954: 293954_1,
293985: noir,
294071: 294071_3,
ean : 5035915032563,
Nature: 450 ,
creation_date: 2018-08-28T12:25:06.638Z,
update_date: 2018-08-28T12:32:55.640Z