这是我的第一篇帖子,谢谢。
我使用javax.json库读取包含Json的导入file.txt。
案文如下:
[{
"role" : "role1",
"db" : "db_admin",
"flag" : false,
"roles" : [
{
"role" : "role",
"db" : "db_admin"
}
],
"inRoles" : [
{
"role" : "role",
"db" : "db_admin"
}
]
},
{
"role" : "role2",
"db" : "db_admin",
"flag" : false,
"roles" : [
{
"role" : "role",
"db" : "db_admin"
}
],
"inRoles" : [
{
"role" : "role",
"db" : "db_admin"
}
]
},
{
"role" : "role3",
"db" : "db_admin",
"flag" : false,
"roles" : [
{
"role" : "role",
"db" : "db_admin"
}
],
"inRoles" : [
{
"role" : "role",
"db" : "db_admin"
}
]
}]现在,我做了几次尝试,但我只读到了第一个对象。这是我阅读first JsonArray的代码:
//I read all line and put them into StringBuilder and then in a unique String
String json = sbJson.toString();
JsonReader jsonreader = Json.createReader(new StringReader(json));
// Get the JsonObject structure from JsonReader.
JsonObject jsonobject = jsonreader.readObject();
jsonreader.close();
// read json array
JsonArray jsonarray = jsonobject.getJsonArray("roles");
JsonObject value = jsonarray.getJsonObject(0);
String roles_role = value.getString("role");
String roles_db = value.getString("db");
jsonarray = jsonobject.getJsonArray("inRoles");
value = jsonarray.getJsonObject(0);
String inheritedRoles_role = value.getString("role");
String inheritedRoles_db = value.getString("db");所以我可以从第一个JsonObject中获得所有元素,但是我需要其他人,我已经尝试了更多的解决方案,但它们对我来说并不适用。
发布于 2020-12-05 18:55:27
您需要执行一个for循环来读取所有内容。这是你怎么做的
static String json = "[{\n"
+ " \"role\" : \"role1\",\n"
+ " \"db\" : \"db_admin\",\n"
+ " \"flag\" : false,\n"
+ " \"roles\" : [\n"
+ " {\n"
+ " \"role\" : \"role\",\n"
+ " \"db\" : \"db_admin\"\n"
+ " }\n"
+ " ],\n"
+ " \"inRoles\" : [\n"
+ " {\n"
+ " \"role\" : \"role\",\n"
+ " \"db\" : \"db_admin\"\n"
+ " }\n"
+ " ]\n"
+ " },\n"
+ " {\n"
+ " \"role\" : \"role2\",\n"
+ " \"db\" : \"db_admin\",\n"
+ " \"flag\" : false,\n"
+ " \"roles\" : [\n"
+ " {\n"
+ " \"role\" : \"role\",\n"
+ " \"db\" : \"db_admin\"\n"
+ " }\n"
+ " ],\n"
+ " \"inRoles\" : [\n"
+ " {\n"
+ " \"role\" : \"role\",\n"
+ " \"db\" : \"db_admin\"\n"
+ " }\n"
+ " ]\n"
+ " },\n"
+ " {\n"
+ " \"role\" : \"role3\",\n"
+ " \"db\" : \"db_admin\",\n"
+ " \"flag\" : false,\n"
+ " \"roles\" : [\n"
+ " {\n"
+ " \"role\" : \"role\",\n"
+ " \"db\" : \"db_admin\"\n"
+ " }\n"
+ " ],\n"
+ " \"inRoles\" : [\n"
+ " {\n"
+ " \"role\" : \"role\",\n"
+ " \"db\" : \"db_admin\"\n"
+ " }\n"
+ " ]\n"
+ " }]";
public static void main(String[] args) throws Exception {
JsonReader jsonreader = Json.createReader(new StringReader(json));
// Get the JsonObject structure from JsonReader.
JsonArray jsonArray = jsonreader.readArray();
jsonreader.close();
for(Object j :jsonArray.toArray()){
System.out.println("j:"+ j);
}
}在我的本地人看来就是这样
--- exec-maven-plugin:1.5.0:exec (default-cli) @ hackerrank ---
j:{"role":"role1","db":"db_admin","flag":false,"roles":[{"role":"role","db":"db_admin"}],"inRoles":[{"role":"role","db":"db_admin"}]}
j:{"role":"role2","db":"db_admin","flag":false,"roles":[{"role":"role","db":"db_admin"}],"inRoles":[{"role":"role","db":"db_admin"}]}
j:{"role":"role3","db":"db_admin","flag":false,"roles":[{"role":"role","db":"db_admin"}],"inRoles":[{"role":"role","db":"db_admin"}]}
------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time: 0.979 s如果我使用的是javax json,我在下面有一个mvn项目并使用了依赖项。
<dependency>
<groupId>javax.json</groupId>
<artifactId>javax.json-api</artifactId>
<version>1.1.4</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.1.4</version>
</dependency>此外,如果只想从数组中获取一个对象,则可以检查https://stackoverflow.com/a/8481439/175554。
https://stackoverflow.com/questions/65128035
复制相似问题