Вопрос по json, java, parsing – Как преобразовать произвольный JSON в полезную структуру в Java

11

Я пытаюсь использовать gson для преобразования возвращенного JSON в какой-то структура данных, так что я могу извлечь полезные данные.

Например:

http://search.twitter.com/search.json?q=test&rpp=1

Возвращает:

{
    "completed_in":0.028,
    "max_id":196386333906837504,
    "max_id_str":"196386333906837504",
    "next_page":"?page=2&max_id=196386333906837504&q=test&rpp=1",
    "page":1,
    "query":"test",
    "refresh_url":"?since_id=196386333906837504&q=test",
       "results":[
          {
             "created_at":"Sat, 28 Apr 2012 23:52:05 +0000",
             "from_user":"della_ky",
             "from_user_id":525641596,
             "from_user_id_str":"525641596",
             "from_user_name":"kydella modeste",
             "geo":null,
             "id":196386333906837504,
             "id_str":"196386333906837504",
             "iso_language_code":"en",
             "metadata":{
                "result_type":"recent"
             },
             "profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/2159990525\/webcam-toy-photo3_20_2__normal.jpg",
             "profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/2159990525\/webcam-toy-photo3_20_2__normal.jpg",
             "source":"<a href="http:\/\/mobile.twitter.com" rel="nofollow">Mobile Web<\/a>",
             "text":"RT @Y__U__NOOO: #SongsIKnowOffByHeart ALL SONGS I LISTEN TO. BRAIN, Y U NO REMEMBER TEST ANSWERS LIKE THAT?!?",
             "to_user":null,
             "to_user_id":null,
             "to_user_id_str":null,
             "to_user_name":null
          }
       ],
       "results_per_page":1,
       "since_id":0,
       "since_id_str":"0"
    }

В конечном счете, я хотел бы иметь возможность выводить список твитов с имя отправителя и дата / время твита.

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

Нужно ли мне определять класс, который точно соответствует структуре JSON для того, чтобы затем заполнить экземпляр этого класса? Если это так кажется очень негибким / трудоемким. В идеале я ищу что-то который будет обрабатывать JSON в любой форме и дать мне структуру, которую я могу использовать автоматически...

Кто-нибудь может дать мне несколько советов? Быть новичком в этом - тем более подробно и на словах наименьшее количество слогов, тем лучше!

Обновление - благодаря ответам, которые я уже получил по этому вопросу, я попытался собрать класс, чтобы записать JSON в Твиттере. Однако, поскольку JSON имеет встроенный ArrayList объектов, я немного борюсь ... Пока что у меня есть

public class tweetData {
    private double completed_in;
    private long max_id;
    private long max_id_str;
    private String next_page;
    private int page;
    private String query;
    private String refresh_url;
    private List<tweetDetails> tweets = new ArrayList<tweetDetails>();
}

а также

public class tweetDetails {
    private String created_at;
    private String from_user;
    private long from_user_id;
    private long from_user_id_str;
    private String from_user_name;
    private String geo;
    private long id;
    private long id_str;
    private String iso_language_code;
//  "metadata":
//  {
//  "result_type":"recent"
//  },
    private String profile_image_url;
    private String profile_image_url_https;
    private String source;
    private String text;
    private String to_user;
    private String to_user_id;
    private String to_user_id_str;
    private String to_user_name;
}

Которым я инстанцирую

URI uri = new URI("http", "search.twitter.com", "/search.json", "q="+ searchTerms + "&rrp=" + RRP, null);
URL twitterSearch = uri.toURL();
URLConnection yc = twitterSearch.openConnection();
JsonReader reader = new JsonReader(new InputStreamReader(yc.getInputStream()));
Gson gson = new Gson();
tweetData data = gson.fromJson(reader, tweetData.class);
System.out.println(data);

Основное имя: значения заполняются правильно, а ArrayList - нет.

tweetData : 0.17196614959919140865196614959919140865?page=2&max_id=196614959919140865&q=test1test?since_id=196614959919140865&q=testSIZE 0[]

Итак, я все еще немного борюсь - любые советы очень ценятся!

Тиа, Том

Error: User Rate Limit Exceeded Eugene Retunsky

Ваш Ответ

4   ответа
1

Error: User Rate Limit ExceededError: User Rate Limit Exceeded

Error: User Rate Limit ExceededObject.classError: User Rate Limit ExceededfromJson()Error: User Rate Limit ExceededLinkedTreeMapError: User Rate Limit ExceededArrayListError: User Rate Limit Exceeded

Object result = (new Gson()).fromJson(jsonString, Object.class)

Error: User Rate Limit Exceededpartial parsingError: User Rate Limit Exceeded

GsonError: User Rate Limit ExceededLinkedTreeMapError: User Rate Limit ExceededArrayListError: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Person {
    String name;
    Object details;
}

Error: User Rate Limit Exceeded

Error: User Rate Limit ExceededfromJson(input, Person.class)Error: User Rate Limit Exceeded

{ 
    "name": "Carlsson", 
    "details": {
        "address": "Stockholm",
        "phones": [
            "work": "233-322-233-322",
            "home": "none"
        ]
    }
}

Error: User Rate Limit ExceedednameError: User Rate Limit Exceeded"Carlsson"Error: User Rate Limit ExceededdetailsError: User Rate Limit ExceededLinkedTreeMapError: User Rate Limit Exceeded"address"Error: User Rate Limit Exceeded"phones"Error: User Rate Limit Exceeded

10

JSON in order to then populate an instance of that class? If so this seems very inflexible/laborious.

Error: User Rate Limit ExceededError: User Rate Limit ExceededError: User Rate Limit Exceededonce.

Ideally I'm looking for something which will handle JSON in any form and give me a structure I can use automatically...

Error: User Rate Limit ExceededError: User Rate Limit Exceeded.

Error: User Rate Limit Exceeded

final JSONObject json = new JSONObject(theJsonString);
final String id = json.getString("max_id");
final JSONArray results = json.getJSONArray("results");
final String user = results.getJSONObject(2).getString("from_user");
Error: User Rate Limit Exceeded Tom
2

3

).

Error: User Rate Limit Exceeded Tom
Error: User Rate Limit Exceeded

Похожие вопросы