当前位置: 首页 > 知识库问答 >
问题:

如何使用javax.json库迭代更多JsonObject

裴嘉许
2023-03-14
    [{
            "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"
                    }
            ]
    }]
//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");

所以我可以从第一个JSOObject中获得所有元素,但我需要其他的,我已经尝试了更多的解决方案,但它们对我不起作用...

共有1个答案

房时铭
2023-03-14

您需要执行一个for循环,以便读取ALL。以下是你怎么做的

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>
 类似资料:
  • 使用JSF 2.0,我需要显示一个表,其中每一行都包含一个打开弹出窗口的链接。我有两种型号:

  • 有没有办法在for循环中使变量可迭代?我正在尝试制作一个密码生成器,对于for循环,我使用一个输入数字的变量。 当我试图在循环中使用变量时,我得到< code > ' int ' object is not iterable 。

  • 问题内容: 我有一个像这样的ArrayList对象: 如何遍历列表?我想在TextView中显示值,该值来自ArrayList对象的数据。 问题答案: 最简单的方法是遍历的所有s ,然后遍历的所有键:

  • 问题内容: 我有这样的地图 现在,我必须迭代此Map,然后迭代该地图内的ArrayList。如何使用JSTL做到这一点? 问题答案: 你可以使用标签来遍历数组,集合和映射。 如果是数组和集合,则每次迭代var都会立即为你提供当前迭代的项目。 对于地图,每次迭代var都会为你提供一个Map.Entry对象,该对象又具有getKey()和getValue()方法。 在你的特定情况下,实际上是a Lis

  • 本文向大家介绍我们如何使用Java中的javax.json API更新现有的JSON数据?,包括了我们如何使用Java中的javax.json API更新现有的JSON数据?的使用技巧和注意事项,需要的朋友参考一下 该JsonBuilderFactory 接口是一个工厂来创建JsonObjectBuilder 实例和JsonObjectBuilder 是创建一个构造函数的JSONObject 从头

  • 我是一个胡子新手,我想知道如何在这个地图上反复使用胡子 地图键名称各不相同。理想情况下,我希望mustache可以迭代其键和值。因此,在java中,它将如下所示: 所以有人能告诉我如何在小胡子中实现以上。我的意思是模板会是什么样子?我尝试了这个模板,但到目前为止还没有运气:( 所以当我运行这个模板时,输出