Как разобрать строку в список <Dictionary>? - PullRequest
1 голос
/ 06 марта 2012

Скажем, у вас есть такая строка:

[{"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 будет "ДЖОН" и т. Д.

Может быть, есть какой-то автоматизированный способ сделать это?

Ответы [ 5 ]

2 голосов
/ 06 марта 2012

Похоже, у вас есть массив JSON.Вы можете рассмотреть библиотеку GSON.Он конвертирует json в объекты очень простым способом.

Например,

    Gson gson = new Gson();
    Type listType = new TypeToken<List<Item>>() {}.getType();
    List<Item> itemList = gson.fromJson(items, listType);

Этот код может конвертировать json в список элементов.

Как только вы получите списокВы можете перебрать его и получить объект.Из объекта вы можете получить нужное вам значение.

Надеюсь, оно соответствует вашим целям.

1 голос
/ 06 марта 2012

Хотя этот ответ не обрабатывает все элементы массива (включая синтаксический анализ ваших объектов 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;
}

}
1 голос
/ 06 марта 2012

Вы можете использовать парсер JSON ...

Взгляните на этот ТАК вопрос .

1 голос
/ 06 марта 2012

Используйте Google GSON для анализа строки JSON в объектах Java.

См. Этот учебник для примера.

0 голосов
/ 06 марта 2012

String.split ( ""); даст вам значение, которое будет содержать ключ и значение. А затем выполните разбиение отдельной строки массива, используя «:», что снова даст массив, и вы можете создать из него объект словаря.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...