所以我有一个 json 文件,其中大约有 350 个对象。我提供了一个示例,如下所示:
"type": "success",
"value": [
{
"id": 1,
"joke": "Joke 1 - Text",
"categories": [
"explicit"
]
},
{
"id": 2,
"joke": "Joke 2 - Text.",
"categories": [
]
},
{
"id": 3,
"joke": "Joke 3 - Text",
"categories": [
]
},
到目前为止,我已经能够得到第一个笑话,但我使用的 json 只有一个笑话。现在我想循环遍历所有内容并获得 2 个随机笑话。我见过人们使用 json 数组进行循环的示例,但它对我不起作用,因为我的 json 文件结构不同。这就是我获得第一个对象的方式:
String finalJson = buffer.toString();
JSONObject parentObject = new JSONObject((finalJson));
JSONObject finalObj = parentObject.getJSONObject("value");
String jokes = finalObj.getString("joke");
int id = finalObj.getInt("id");
return id + " " + jokes;
就像我之前说的,我想循环遍历每个对象,然后选择 2 个随机 id 并得到笑话。我不知道这是否是最好的方法,但我的想法是有一个 Random r
,其最大值为 350,最小值为 1,然后根据 id 通过 id 选择笑话对象随机编号
最佳答案
value 不是一个 JSONObject,而是一个 JSONArray,这应该会给你两个随机的笑话
String finalJson = buffer.toString();
JSONObject parentObject = new JSONObject((finalJson));
//JSONObject finalObj = parentObject.getJSONObject("value");
JSONArray jokeArray = parentObject.getJSONArray("value");
Random r = new Random();
String joke1 = jokeArray.getJSONObject(r.nextInt(jokeArray.length())).getString("joke");
String joke2 = jokeArray.getJSONObject(r.nextInt(jokeArray.length())).getString("joke");
这还取决于 ids 始终从 1 开始并每次递增 1 的事实
编辑
要也显示 ID,请进一步分割...
String finalJson = buffer.toString();
JSONObject parentObject = new JSONObject((finalJson));
//JSONObject finalObj = parentObject.getJSONObject("value");
JSONArray jokeArray = parentObject.getJSONArray("value");
Random r = new Random();
int id1 = r.nextInt(jokeArray.length())
String joke1 = jokeArray.getJSONObject(id1).getString("joke");
int id2 = r.nextInt(jokeArray.length())
String joke2 = jokeArray.getJSONObject(id1).getString("joke");
String joke1WithID = id1 + " " + joke1
String joke2WithID = id2 + " " + joke2
关于java - 循环遍历 json 并按 id 选择随机对象 - Android/JAVA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36115165/