Разбор JSON, когда имена являются регулярными выражениями (даты) - PullRequest
0 голосов
/ 19 мая 2011

Извинения, если заголовок темы не точный, я действительно не знал, как это выразить (не каламбур). Я должен проанализировать JSON со структурой, аналогичной приведенной ниже. В файле есть несколько таких массивов Date: каждый массив именуется датой в форме yyyy-MM-dd, но я не знаю точно, какие даты будут в файле (поэтому я не могу извлечь массив с помощью его имя). Как еще я мог получить это? Я использую json.simple для Java для разбора файлов. Я не ожидаю ответа, говорящего мне, как это сделать, используя эту библиотеку, но если кто-нибудь знает, это будет бонусом:)

"2011-05-15":[
     {
        "promoted_content":null,
        "events":null,
        "query":"AnahiHappyBDay",
        "name":"AnahiHappyBDay"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"Puerto Ricans",
        "name":"Puerto Ricans"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"Epic Movie",
        "name":"Epic Movie"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"Lee Soonkyu",
        "name":"Lee Soonkyu"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"MC1123",
        "name":"MC1123"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"Dominique Strauss-Kahn",
        "name":"Dominique Strauss-Kahn"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"WeLoveNickJonas",
        "name":"WeLoveNickJonas"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"Ripper Stefan",
        "name":"Ripper Stefan"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"Luc\u00eda P\u00e9rez",
        "name":"Luc\u00eda P\u00e9rez"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"DB5K",
        "name":"DB5K"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"WeSupportYouGomez",
        "name":"WeSupportYouGomez"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"LSnoAltasHoras",
        "name":"LSnoAltasHoras"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"Azerbaijan",
        "name":"Azerbaijan"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"Eurovision",
        "name":"Eurovision"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"Derek Boogaard",
        "name":"Derek Boogaard"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"Terry Wogan",
        "name":"Terry Wogan"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"FMI",
        "name":"FMI"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"WorldLovesSwift",
        "name":"WorldLovesSwift"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"WorldWarIV",
        "name":"WorldWarIV"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"Jedward",
        "name":"Jedward"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"GAGA10MILLION",
        "name":"GAGA10MILLION"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"Stefan Raab",
        "name":"Stefan Raab"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"Manchester United Campe\u00f3n",
        "name":"Manchester United Campe\u00f3n"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"Derek Mooney",
        "name":"Derek Mooney"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"Chord Overstreet",
        "name":"Chord Overstreet"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"IMF",
        "name":"IMF"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"Joe Buck",
        "name":"Joe Buck"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d",
        "name":"\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"Wango Tango",
        "name":"Wango Tango"
     },
     {
        "promoted_content":null,
        "events":null,
        "query":"AlwaysRihannaNavy",
        "name":"AlwaysRihannaNavy"
     }
  ],

Ответы [ 2 ]

1 голос
/ 19 мая 2011

Я не совсем уверен, если я понимаю ваш вопрос, но я предполагаю, что вы хотите список ключей даты.

Анализ этого с помощью json.simple должен привести к JSONObject, который является картой, поэтому метод keySet() даст вам то, что вам нужно:

JSONObject<String, Object> obj = (JSONObject<String, Object>)JSONValue.parse(s);
for (String key in obj.keySet()) {
  // do something with key
}
0 голосов
/ 19 мая 2011

На самом деле я не очень понимаю, что вы имеете в виду ... Тем не менее, я думаю, что у меня есть решение [Использование GSON (библиотека от Google)] После просмотра ваших данных, я думаю, мы можем создать класс. как это

public class Foo{
  private Date date/* or ID ?*/;
  private List<Content> contents; //a class defined blow
  /* constructors and methods */
}

public class Content{
  private String promoted_content;// Or a class? I'm not sure, because I found all of them is null
  private String events;// same as promoted_content
  private String query;
  private String name;    
  /* constructors and methods */
}

Теперь, используя gson, проанализируем ваши данные. как это

Gson gson = new Gson();//maybe you wanna read docs of gson for more detail
Foo foo = gson.fromjson(/*your data*/, Foo.class);

Здесь вы знаете, что у вас есть объект с именем Foo, и вы можете получить его значения. Я заметил, что вы сказали, что, возможно, существует более ОДНОЙ «даты», поэтому мы можем создать новый класс, содержащий List.

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