gpt4 book ai didi

java - 解析具有未确定数量的子节点的 JSON 对象

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

我使用 Dropbox API,我想从 json 对象中获取文件夹和路径。但是我遇到了问题,因为子节点数量减少了。我将如何去解析这样的东西?

编辑

JSONObject 代表一个目录。顶级文件夹由 json 对象表示。在该对象中是子文件夹。他们每个人都有 JSONobject,在每个 jsonobject 中都有一个数组,代表子文件夹的子文件夹。所以不知道json的完整结构

最佳答案

我刚刚遇到了同样的问题,我写了一个带有递归算法的类,该算法遍历并搜索特定的 id.. 似乎工作正常,请随意试一试!

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class JsonReference {
Object data;

public JsonReference(String buildFromString){
try {
data = new JSONObject(buildFromString);
} catch (JSONException e) {
e.printStackTrace();
}

if(data == null){
try {
data = new JSONArray(buildFromString);
} catch (JSONException e) {
e.printStackTrace();
}
}
}

public Object getAbstractJsonObject(){
return data;
}

public List<String> parseForData(String data,boolean removeDuplicates){
Traverser valFinder = new Traverser(0);
valFinder.setValues(data, removeDuplicates);
valFinder.traverseForStringValue(this.data);
return valFinder.foundInstances;
}

class Traverser{
List<String> foundInstances = new ArrayList<String>();
String value;
boolean removeDuplicates;

public Traverser(int type){

}

public void setValues(String value,boolean removeDuplicates){
this.value = value;
this.removeDuplicates = removeDuplicates;
}

public void traverseForStringValue(Object root){

if(root == null){
return;
}
else if(root instanceof JSONObject){
JSONObject self = (JSONObject)root;

//if the key exists in this object.. save it!
if(self.has(value)){
try {
if(!removeDuplicates || notRepeat(self.getString(value)))
foundInstances.add(self.getString(value));
} catch (JSONException e) {
e.printStackTrace();
}
return;
}

//otherwise, see if you can dive deeper..
JSONArray names = self.names();
for(int i=0;i<names.length();i++){
String temp = null;
try{
temp = names.getString(i);
}
catch(JSONException e){
e.printStackTrace();
}
if(temp != null){
try {
if(self.get(temp) instanceof JSONObject || self.get(temp) instanceof JSONArray)
traverseForStringValue(self.get(temp));
else if(self.get(temp) instanceof String){
if(!removeDuplicates || notRepeat(self.getString(value)))
foundInstances.add(self.getString(value));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}

}
else if(root instanceof JSONArray){
JSONArray self = (JSONArray)root;

//iterate through the array..
for(int i=0;i<self.length();i++){
Object temp = null;
try {
temp = self.get(i);
} catch (JSONException e) {
e.printStackTrace();
}

if(temp != null && temp != JSONObject.NULL){

if(temp instanceof JSONObject || temp instanceof JSONArray)
traverseForStringValue(temp);
else if(temp instanceof String && ((String)temp).contains(value)){
try {
if(!removeDuplicates || notRepeat(self.getString(i)))
foundInstances.add(self.getString(i));
} catch (JSONException e) {
e.printStackTrace();
}
}

}
}
}
}

private boolean notRepeat(String s){
for(String item : foundInstances){
if(item.equals(s))
return false;
}
return true;
}
}
}

关于java - 解析具有未确定数量的子节点的 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11615616/

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