当前位置: 首页 > 面试题库 >

如何在Java中将任意JSON转换为可用结构

仉刚洁
2023-03-14
问题内容

我正在尝试使用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并为我提供可以自动使用的结构的东西…

有人能给我一些建议吗?对此不陌生-越详细,用最少的音节换句话说就越好!

更新-由于我已经对此做出了回应,因此我得以将一个类放在一起以捕获twitter
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[]

因此,我仍然在挣扎-任何其他提示,我们将不胜感激!

蒂娅汤姆


问题答案:

我是否需要定义一个完全映射到JSON结构的类,以便随后填充该类的实例?如果是这样,这似乎很不灵活/费力。

是。GSON是一个可用于将Java对象转换为其JSON表示形式的库。它还可以用于将JSON字符串转换为等效的Java对象。这确实非常强大,因为您可以从JSON表示中自动实例化Java对象。假设您的JSON不会改变其结构,则只需定义
一次 适当的Java对象表示 即可

理想情况下,我正在寻找可以处理任何形式的JSON并为我提供可以自动使用的结构的东西…

但是,如果您不想自动进行序列化/反序列化,请尝试查看一个更简单的库,例如java.net/projects/jsonp。

您可以通过查询键从中提取内容:

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");


 类似资料:
  • 这个问题被问了很多次,但我找不到解决问题的答案。 我试图将嵌套的JSON格式转换为CSV格式如下: JSON结构是任意的,可以是任何东西,嵌套或不嵌套。 我不应该知道它,这是一个数据库答案,我需要将这个JSON答案导出到CSV文件中。 下面是一个例子 输入: 我想要的结果是: 这是一个例子,它可以是任何其他JSON文档。 这里的想法是在CSV列名中使用点表示法。 我已经使用了CDL,但输出不是我想

  • 问题内容: 由于使用JDBC连接器进行MySQL查询,因此我有一个结果集。所以我的工作是将结果集转换为JSON格式。这样我就可以将其作为AJAX响应发送到客户端。有人可以解释一下如何转换为JSON格式,因为我对Java和JSON都是新手 问题答案: 许多人正确地回答了这个问题。但是,我认为我可以使用以下几小段代码为该帖子添加更多价值。它使用Apache-DBUtils和Gson库。

  • 问题内容: 我只想使用Java将包含yaml的字符串转换为包含对应的已转换json的另一个字符串。 例如,假设我拥有此Yaml的内容 在名为yamlDoc的字符串中: 我想要一些可以将yaml字符串转换为带有相应json的另一个字符串的方法,即以下代码 应该打印: 我想知道在此示例中是否存在类似于 convertToJson() 方法的内容。 我试图使用SnakeYAML实现这一点,所以这段代码

  • 问题内容: 如何在Java中将通用列表转换为json。我有这样的类.. 我想将outputList转换为Java中的json。转换后我会将其发送到客户端。 问题答案: 为此使用GSON库。这是示例代码 这是Gson的Maven依赖 或者您可以从此处直接下载jar并将其放在您的课​​程路径中 http://code.google.com/p/google- gson/downloads/detail

  • 我只想用Java将包含yaml的字符串转换成另一个包含corrseponding转换的json的字符串。 如有任何回应,将不胜感激。

  • 问题内容: 我有一个mysqli查询,我需要将其格式化为移动应用程序的JSON。 我已经设法为查询结果生成一个XML文档,但是我正在寻找更轻量的东西。(有关我当前的XML代码,请参见下文) 问题答案: 这样的输出: 如果您想要其他样式,可以尝试以下方法: 输出将是这样的: