我有一个如下的JSON对象:
member = "{interests : [{interestKey:Dogs}, {interestKey:Cats}]}";
在Java中,我想解析上述JSON对象并将其值存储在ArrayList中。
我正在寻找一些代码来实现这一点。我有一个如下的JSON对象:
member = "{interests : [{interestKey:Dogs}, {interestKey:Cats}]}";
在Java中,我想解析上述JSON对象并将其值存储在ArrayList中。
我正在寻找一些代码来实现这一点。我假定你想要将interestKeys存储在一个列表中。
使用org.json库:
JSONObject obj = new JSONObject("{interests : [{interestKey:Dogs}, {interestKey:Cats}]}");
List<String> list = new ArrayList<String>();
JSONArray array = obj.getJSONArray("interests");
for(int i = 0 ; i < array.length() ; i++){
list.add(array.getJSONObject(i).getString("interestKey"));
}
20090211
完成的。也许它的性能在过去的10年中有所提高? - Alistair Jonespublic class JsonParsing {
public static Properties properties = null;
public static JSONObject jsonObject = null;
static {
properties = new Properties();
}
public static void main(String[] args) {
try {
JSONParser jsonParser = new JSONParser();
File file = new File("src/main/java/read.json");
Object object = jsonParser.parse(new FileReader(file));
jsonObject = (JSONObject) object;
parseJson(jsonObject);
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static void getArray(Object object2) throws ParseException {
JSONArray jsonArr = (JSONArray) object2;
for (int k = 0; k < jsonArr.size(); k++) {
if (jsonArr.get(k) instanceof JSONObject) {
parseJson((JSONObject) jsonArr.get(k));
} else {
System.out.println(jsonArr.get(k));
}
}
}
public static void parseJson(JSONObject jsonObject) throws ParseException {
Set<Object> set = jsonObject.keySet();
Iterator<Object> iterator = set.iterator();
while (iterator.hasNext()) {
Object obj = iterator.next();
if (jsonObject.get(obj) instanceof JSONArray) {
System.out.println(obj.toString());
getArray(jsonObject.get(obj));
} else {
if (jsonObject.get(obj) instanceof JSONObject) {
parseJson((JSONObject) jsonObject.get(obj));
} else {
System.out.println(obj.toString() + "\t"
+ jsonObject.get(obj));
}
}
}
}}
Set<Object> set = jsonObject.keySet();
Iterator<Object> iterator = set.iterator();
更改为:
Iterator<?> iterator = jsonObject.keys();
我分享我的实现方式,以帮助其他人:public void parseJson(JSONObject jsonObject) throws ParseException, JSONException {
Iterator<?> iterator = jsonObject.keys();
while (iterator.hasNext()) {
String obj = iterator.next().toString();
if (jsonObject.get(obj) instanceof JSONArray) {
//Toast.makeText(MainActivity.this, "Objeto: JSONArray", Toast.LENGTH_SHORT).show();
//System.out.println(obj.toString());
TextView txtView = new TextView(this);
txtView.setText(obj.toString());
layoutIzq.addView(txtView);
getArray(jsonObject.get(obj));
} else {
if (jsonObject.get(obj) instanceof JSONObject) {
//Toast.makeText(MainActivity.this, "Objeto: JSONObject", Toast.LENGTH_SHORT).show();
parseJson((JSONObject) jsonObject.get(obj));
} else {
//Toast.makeText(MainActivity.this, "Objeto: Value", Toast.LENGTH_SHORT).show();
//System.out.println(obj.toString() + "\t"+ jsonObject.get(obj));
TextView txtView = new TextView(this);
txtView.setText(obj.toString() + "\t"+ jsonObject.get(obj));
layoutIzq.addView(txtView);
}
}
}
}
1.) 创建一个适当类型的ArrayList,本例中为String
2.) 创建一个JSONObject
,将您的字符串作为输入传递给JSONObject
构造函数
JSONObject
表示为大括号,即{}
JSONArray
表示为方括号,即[]
3.) 使用"interests"
作为索引从第二步创建的JSONObject
中检索JSONArray
。
4.) 使用循环遍历JASONArray
,直到达到由length()
函数提供的数组长度。
5.) 使用getJSONObject(index)
函数从JSONArray
中检索您的JSONObjects
6.) 使用索引'"interestKey"'从JSONObject
中获取数据。
注意:如果json响应(通常来自其他JSON响应API)包含引号("
),则JSON
解析使用特殊嵌套字符的转义序列。
`"{"key":"value"}"`
应该是这样的
`"{\"key\":\"value\"}"`
因此,您可以使用JSONParser
来实现转义序列格式以提高安全性。
JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(inputString);
Code :
JSONParser parser = new JSONParser();
String response = "{interests : [{interestKey:Dogs}, {interestKey:Cats}]}";
JSONObject jsonObj = (JSONObject) parser.parse(response);
JSONObject jsonObj = new JSONObject("{interests : [{interestKey:Dogs}, {interestKey:Cats}]}");
List<String> interestList = new ArrayList<String>();
JSONArray jsonArray = jsonObj.getJSONArray("interests");
for(int i = 0 ; i < jsonArray.length() ; i++){
interestList.add(jsonArray.getJSONObject(i).optString("interestKey"));
}
Get an optional string associated with a key. It returns the defaultValue if there is no such key.
public String optString(String key, String defaultValue) {
String missingKeyValue = json_data.optString("status","N/A");
// note there is no such key as "status" in response
// will return "N/A" if no key found
或者,如果没有找到键,则可以直接使用空字符串,即""
String missingKeyValue = json_data.optString("status");
// will return "" if no key found where "" is an empty string
进一步参考研究
public class MyObj {
private List<Interest> interests;
static final class Interest {
private String interestKey;
}
private static final ObjectMapper MAPPER = new ObjectMapper();
public static void main(String[] args) throws IOException {
MyObj o = JACKSON.readValue("{\"interests\": [{\"interestKey\": \"Dogs\"}, {\"interestKey\": \"Cats\" }]}", MyObj.class);
}
}
如果您有任何问题,请告知我。