gpt4 book ai didi

java - 如何解析包含多个数组的 JSON 文件?

转载 作者:行者123 更新时间:2023-11-30 06:50:54 25 4
gpt4 key购买 nike

所以我有一个包含多个数组的 JSON 文件。 “数据”包含一大堆单词,每个单词都包含“线索”。我已经用一个数组解析了一个 JSON 文件,但我不确定如何解析它。我知道 JSONObjects 被 {} 包围,JSONArrays 被 [] 包围,所以“数据”应该是一个 JSONObject,每个单词都是一个数组。

{
"data":{
"abase":[
"put down",
"humiliate",
"cut down",
],
"abate":[
"diminish",
"let up",
],
"abbot":[
"monastery head",
"monastic title",
]
}
}

我可以用单个数组解析一个 JSON 文件并从数据中创建对象:

JSONObject allThings = loadJSONObject("filename.json");
JSONArray arr = getJSONArray("titleofarray");
for (int x = 0; x<=arr.size(); x++){
String fieldOne = arr.getJSONObject(x).getString("firstField");
int fieldTwo = arr.getJSONObject(x).getInt("secondField");
}

我可以创建一个 JSONArray 的 ArrayList 并使用 for-each 将文件中的每个数组添加到该 ArrayList 吗?抱歉,如果我对我的问题不是 100% 清楚,很难针对您不理解的问题提出问题,但如果您需要澄清,请告诉我,我很乐意进一步详细解释。

编辑:我正在使用 Processing/Java

最佳答案

除了 Kevin 的回答之外,您还可以遍历 JSONObject 的 keys() :

  JSONObject associative = loadJSONObject("associative.json");
JSONObject associativeData = associative.getJSONObject("data");

ArrayList<JSONArray> listA = new ArrayList<JSONArray>();

for(Object key : associativeData.keys()){
String keyName = (String)key;
JSONArray data = associativeData.getJSONArray(keyName);
println(keyName,"=",data);
listA.add(data);
}

System.err.println(listA);

associative.json:

{
"data":{
"abase":[
"put down",
"humiliate",
"cut down"
],
"abate":[
"diminish",
"let up"
],
"abbot":[
"monastery head",
"monastic title"
]
}

}

您还可以重新组织 JSON 数据,使其符合您的目标。目前,您在 JSON 对象(关联数组)中有单词和同义词。您可以轻松地将其转换为 JSON 数组并构造数据,以便于访问/解析。例如:数组.json

{
"data":[
{
"word":"abase",
"synonyms":[
"put down",
"humiliate",
"cut down"
]
},
{
"word":"abate",
"synonyms":[
"diminish",
"let up"
]
},
{
"word":"abbot",
"synonyms":[
"monastery head",
"monastic title"
]
}
]
}

如果你愿意,你仍然可以制作一个 ArrayList,但你不应该真的需要它,你可以轻松地直接访问每个单词和同义词。它应该更简单,无需转换/解析,只需访问您需要的内容:

ArrayList<JSONArray> listB = new ArrayList<JSONArray>(); 

JSONObject array = loadJSONObject("array.json");
JSONArray arrayData = array.getJSONArray("data");
for(int i = 0 ; i < arrayData.size(); i++){
JSONObject data = arrayData.getJSONObject(i);
println("\t",data.getString("word"),"=",data.getJSONArray("synonyms"));

listB.add(data.getJSONArray("synonyms"));
}

System.err.println(listB);

更新这是一个在屏幕上呈现文本的示例:

import processing.data.*;

void setup(){
size(400,400);
background(0);

int textX = 10;
int textY = 20;

JSONObject array = loadJSONObject("array.json");
JSONArray arrayData = array.getJSONArray("data");
for(int i = 0 ; i < arrayData.size(); i++){
JSONObject data = arrayData.getJSONObject(i);
String word = data.getString("word");
JSONArray synonyms = data.getJSONArray("synonyms");
println(word,"=",synonyms);

//render on screen
text(word.toUpperCase(),textX,textY);
for(int j = 0 ; j < synonyms.size(); j++){
String synonym = synonyms.getString(j);
text(synonym,textX,textY + (textY * (j+1)));
}

//increment x position for next word
textX += 100;
}

}

json text parse and preview

更新 2 下面是一个封装示例,在将鼠标悬停在单词上时使用概念验证提示显示:

import processing.data.*;

ArrayList<Word> words = new ArrayList<Word>();

void setup(){
size(400,400);

int textX = 10;
int textY = 20;

JSONObject array = loadJSONObject("array.json");
JSONArray arrayData = array.getJSONArray("data");
for(int i = 0 ; i < arrayData.size(); i++){
JSONObject data = arrayData.getJSONObject(i);
String word = data.getString("word");
JSONArray synonyms = data.getJSONArray("synonyms");
println(word,"=",synonyms);

words.add(new Word(textX,textY,"hint #"+(i+1),data));

//increment x position for next word
textX += 100;
}

}

void draw(){
background(0);
for(Word word : words){
word.draw();
}
}

class Word{
String hint = "...";
JSONObject data;

float x,y;
float textWidth;
float textHeight = 20;



Word(float x,float y,String hint,JSONObject data){
this.x = x;
this.y = y;
this.hint = hint;
this.data = data;
textWidth = textWidth(data.getString("word"));
}

void draw(){
fill(255);
String word = data.getString("word");
JSONArray synonyms = data.getJSONArray("synonyms");
text(word.toUpperCase(),x,y);
for(int j = 0 ; j < synonyms.size(); j++){
String synonym = synonyms.getString(j);
text(synonym,x,y + (textHeight * (j+1)));
}
fill(0,192,0);
//hint tooltip
//if mouse within word bounding box
if((mouseX >= x && mouseX <= x + textWidth) &&
(mouseY >= y-textHeight && mouseY <= y)){
//render the text at mouse coordinates
//be aware that y is the base of the text -> be sure to check out the reference for text functions (e.g. textAscent(),textDescent(),etc.)
text(hint,mouseX,mouseY+textHeight);
}


}


}

关于java - 如何解析包含多个数组的 JSON 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40810657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com