如何将字符串解析为List <dictionary>?</dictionary>

时间:2012-03-06 12:37:57

标签: java android list collections dictionary

假设你有一个这样的字符串:

[{"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”

也许有一些自动化方法可以做到这一点?

5 个答案:

答案 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解析器...

看看this SO question

答案 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( “”);将为您提供一个包含键和值的内容。然后使用“:”对数组的单个字符串进行拆分,这将再次给出一个数组,您可以从中创建一个字典对象。