我使用以下代码从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-
有人能给我看一个基本的工作例子,给我一个我可以修改的最终值吗?
使用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();
对我来说,使用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结构。我根据您的问题推断出它将是什么,但是如果没有实际的结构,我无法保证它可以在不做任何修改的情况下工作。 如果要在映射中访问它