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

如何按键获取嵌套的JSON内容?

皮骏
2023-03-14

我使用以下代码从URL下载JSON文件:

static void getPost() throws Exception {
        String webPage = "https://www.reddit.com/r/arabfunny/top.json?limit=100";

        URL url = new URL(webPage);
        URLConnection request = url.openConnection();
        request.setRequestProperty("Content-Type", "application/json; utf-8");
        request.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2");

        JsonParser jp = new JsonParser();
        JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent()));
        JsonObject rootobj = root.getAsJsonObject();
        String imageURL = rootobj.get("data").toString();
        System.out.println(imageURL);
    }

这正确地获取了代码,但是我在获取第一级数据时遇到了问题,我可以使用。获取(“数据”)并按预期工作,但我无法执行。获取(“数据”)。获取(“儿童”)

JSON文件可以在这里找到。

这里是JSON美化。

我想随机得到一个我不知道孩子数量的孩子。类似于rootobj.get(数据). get(孩子). get(RANDOM). toString();

编辑:

我真的需要一个简单的解决方案,从一个随机的孩子那里得到一些参数。

我需要得到JSON-

有人能给我看一个基本的工作例子,给我一个我可以修改的最终值吗?

共有2个答案

鲍向笛
2023-03-14

使用maven的Jackson

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.11.2</version>
</dependency>
ObjectMapper objectMapper = new ObjectMapper();
JsonNode node = objectMapper.readValue(<OUTPUT_JSON>,JsonNode.class);
rootobj.get("data").get("children")[INDEX].get(RANDOM).asText();
相德宇
2023-03-14

对我来说,使用Pojo定义返回对象并使用Gson反序列化它更容易。

Maven依赖

<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.3</version>
</dependency>

然后定义你的结果Pojo

public class MyResult{

   public Data data;

   //getter

}

//数据POJO

public class Data{

      public String modhash;
      public Integer dist;
      public List<Children> children; //define your object
      public String after;
      public String before;

      //getters
      
   }

儿童POJO

public class Children{
     private String kind;
     private String data; //You can define another Data Object if you want to

     //getters
     
     //toString() method.
}

注意:确保JSON字段名与POJO字段名完全相同。

要将Json字符串转换为对象,请执行以下操作:

//get Json String from request : START
InputStream inputStream = request.getInputStream();
       
InputStreamReader isReader = new InputStreamReader(inputStream);
//Creating a BufferedReader object
BufferedReader reader = new BufferedReader(isReader);
StringBuffer sb = new StringBuffer();
String str;
while((str = reader.readLine())!= null){
   sb.append(str);
}
       
String jsonString = sb.toString();
//get Json String from request : END
        
MyResult result = new Gson().fromJson(jsonString,MyResult.class)
result.getData().getChildren()
    .get(0) //get index 0 from list
    .toString();

如果您不想创建太多的Pojos层,请创建自己的JsonAdapter。

我还没有测试这个,所以可能有一些语法错误。

您还可以查看JsonPath库,以使用点符号解析json文件。

 类似资料:
  • 问题内容: 我在下面的对象中尝试获取所有id值。 使用以下代码,我仅获得第一个id值。有没有办法从嵌套对象中获取所有id值,而无需使用任何外部模块。 预期产量 问题答案: 您可以使用如下所示的JavaScript函数来获取嵌套属性: 检查此小提琴以获取可行的解决方案。

  • 我的要求是从json中收集键和键的值,并将其作为键值打印在列表视图中,这样就不会有预定义的键。 我有一个名为ListDetailModel的嵌套对象,因为还有其他Pojo类的其他几个对象。 现在,我可以派生父对象的键,即ListDetailModel。 我的问题是如何从同一个条目集对象派生嵌套POJO的键。我所知道的是,我可以为所需的Pojo类创建单独的对象,并派生密钥。但我能从同一个类中完成吗?

  • 问题内容: 我正在尝试从数据JSON获取值。我已经成功遍历了JSON数据,几乎满足了我的需求! 在Python中运行以下命令: 给我这个: 我只想获得价值。这是关键。 如何进一步执行命令以仅返回值? 问题答案: 这是完整的输出吗?这本字典包含带有嵌套字典的列表,因此您应该这样处理。假设它被称为: 您的第一个地址是对象,然后是字典中的键,列表中的索引以及该字典的键: 输出: 编辑:根据您所得到的然后

  • 我有这样一个嵌套的JSON,它存储在中。 我正在使用io.vertx.core.json,并且只能使用这个库。

  • 问题内容: 我有正在使用nodeJS读取的csv文件。我在阅读之前将每个文件转换为文本。 文件中的每一行都有以’=’分隔的数据。 每行看起来像 “ =“之前的第一部分代表我应用程序中json对象的索引。我的目的是解析此数据并为其构建json表示,以便上面的行成为 使用javascript / node js; 如何将应该表示嵌套JSON键序列的字符串转换为上述json对象? 问题答案: 您可以分割

  • 问题内容: 团队,编程新手。如下图所示对Json进行编组后,我有可用数据,该数据具有嵌套的Key值。我可以访问的固定键值,如何访问嵌套键值。拆封后,这是下面显示的字节切片数据—> 我可以使用以下代码访问平面键值 这是完整的功能 问题答案: 注意:这可能不适用于您的JSON结构。我根据您的问题推断出它将是什么,但是如果没有实际的结构,我无法保证它可以在不做任何修改的情况下工作。 如果要在映射中访问它