【问题标题】:How to Iterate more JsonObject using javax.json lib如何使用 javax.json lib 迭代更多 JsonObject
【发布时间】:2021-03-15 14:09:46
【问题描述】:

这是我的第一篇文章,谢谢。

我正在使用 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 中获取所有元素,但我需要其他元素,并且我尝试了更多解决方案,但它们对我不起作用...

【问题讨论】:

    标签: java arrays json javax.json


    【解决方案1】:

    您需要执行一个 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

    【讨论】:

      猜你喜欢
      • 2015-05-16
      • 2015-03-13
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-21
      相关资源
      最近更新 更多