假设你有一个这样的字符串:
[{"updated_at": "2012-03-02 21:06:01", "fetched_at": "2012-03-02 21:28:37.728840", "description": null, "language": null, "title": "JOHN", "url": "http://rus.JOHN.JOHN/rss.php", "icon_url": null, "logo_url": null, "id": "4f4791da203d0c2d76000035", "modified": "2012-03-02 23:28:58.840076"},{"updated_at": "2012-03-02 14:07:44", "fetched_at": "2012-03-02 21:28:37.033108", "description": null, "language": null, "title": "PETER", "url": "http://PETER.PETER.lv/rss.php", "icon_url": null, "logo_url": null, "id": "4f476f61203d0c2d89000253", "modified": "2012-03-02 23:28:57.928001"}]
并需要将其解析为List
,其中每个项目都是Dictionary
,其中包含上述字符串中的参数和值。
例如,List[0].title
将“JOHN”等
也许有一些自动化方法可以做到这一点?
答案 0 :(得分:2)
看起来你有一个JSON数组。你可以考虑GSON库。 它以非常简单的方式将json转换为对象。
例如
Gson gson = new Gson();
Type listType = new TypeToken<List<Item>>() {}.getType();
List<Item> itemList = gson.fromJson(items, listType);
此代码可以将json转换为项目列表。
获得列表后,您可以遍历它并获取对象。从对象中,您可以获取所需的值。
希望它符合您的目的。
答案 1 :(得分:1)
您可以使用JSON解析器...
答案 2 :(得分:1)
使用Google GSON将JSON字符串解析为Java对象。
有关示例,请参阅此tutorial。
答案 3 :(得分:1)
虽然这个答案不能处理所有数组元素(包括解析Date对象),但您应该能够修改并满足您的需求。只需将文本放入文件并加载即可。祝你好运!
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.Vector;
public class Test {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new FileReader(new File("data.txt")));
String data = br.readLine();
Vector <String> newdata = tidyData(data);
for (String s: newdata)
System.out.println(s);
Vector<Dictionary> myList = createDictionary(newdata);
for(Dictionary d: myList)
{
System.out.println("Title: " + d.title);
}
}
public static Vector<Dictionary> createDictionary(Vector<String> indata)
{
Vector<Dictionary> returnValue = new Vector<Dictionary>();
for (String s: indata)
{
StringTokenizer st = new StringTokenizer(s, ",");
String key = null;
while (st.hasMoreTokens())
{
key = st.nextToken();
System.out.println("key: " + key);
}
returnValue.add(new Dictionary(key));
}
return returnValue;
}
public static class Dictionary
{
public static String title;
public static String description;
public Dictionary(String indata)
{
title = indata;
description = indata;
}
}
public static Vector<String> tidyData(String data)
{
data = data.replace('\"', ' ');
data = data.replace('[', ' ');
data = data.replace(']', ' ');
Vector<String> returnValue = new Vector<String>();
StringTokenizer st = new StringTokenizer(data, "}");
while(st.hasMoreTokens())
{
String token = st.nextToken();
token = token.replace('{', ' ');
token = token.replace('}', ' ');
if (token.startsWith(","))
token = token.replaceFirst(",", " ");
token = token.trim();
returnValue.add(token);
}
return returnValue;
}
}
答案 4 :(得分:0)
String.split( “”);将为您提供一个包含键和值的内容。然后使用“:”对数组的单个字符串进行拆分,这将再次给出一个数组,您可以从中创建一个字典对象。