【问题标题】:Parsing JSON arrays, in a JSON file, into a Java ArrayList将 JSON 文件中的 JSON 数组解析为 Java ArrayList
【发布时间】:2014-11-26 21:00:59
【问题描述】:

我一直在尝试并努力将 JSON 文件中包含的数组解析为 Java ArrayList。我能否就如何进行此操作提供一些建议?请在下面找到一个示例 JSON 数组:

[
  {

    "id": "USER_ID_HERE",
    "dateTime": "DATE_TIME_HERE",
    "message": "WRITE_SOMETHING_MEANINGFUL_HERE",
    "latitude":  27.99999
    "longitude": 26.33333333
  }
]

我当前的 Java 代码可以在下面找到 - 我如何从 JSON 文件中解析数组?

public class ParseJSON {

ArrayList <Tweet> = new ArrayList <Tweet>();

class Tweet{
public String id;
public String message;
public String dateTime;
public double latitude;
public double longitude;
} 

JSONObject js = new JSONObject("tweets");

JSONArray jsarray = js.getJSONArray("tweets");
int size = jsarray.length();
for (int i = 0; i < size; i++)
{
    JSONObject tweet = jsarray.getJSONObject(i);
    System.out.println("tweet: " + tweet.getString("id"));
    System.out.println("tweet: " + tweet.getString("message"));
    System.out.println("tweet: " + tweet.getString("dateTime"));
    System.out.println("tweet: " + tweet.getDouble("latitude"));
    System.out.println("tweet: " + tweet.getDouble("longitude"));
}

   t = new tweet( tweet.getString("id")) & ( tweet.getString("message")) & ( tweet.getString("datetime")) & ( tweet.getDouble("latitude")) &    ( tweet.getDouble("longitude"));

  Tweet.list.add(t);

 }
}

提前感谢您的任何建议。

【问题讨论】:

  • 上面的 JSON 示例是一个包含“对象”的“数组”。 (有关语法,请参见 json.org。)它映射到包含 Map 的 Java 列表。
  • 你能指定你目前有什么异常/行为吗?你想达到什么目的? (打印到屏幕,存储在对象中......等)
  • 我不确定如何将 JSON 文件解析到 Eclipse - 解析对象的数组等效项是什么(Object obj = parser.parse(new FileReader("insert file location"));)?
  • 我将使用通过 Sentiwordnet 解析的数据来收集推文的值,以确定它们是负数还是正数

标签: java arrays json arraylist


【解决方案1】:

您似乎非常接近所需的功能,但有些问题:

首先,您要执行的代码不在方法中。尝试在 ParseJSON 类中添加一个“main”方法。

您的Tweet 类没有自定义构造函数,因此您将无法创建Tweet 对象并在您尝试进一步向下操作时使用构造函数填充它们的属性。

您的ArrayList&lt;Tweet&gt; 成员变量没有标识符。

为:

t = new tweet( tweet.getString("id")) & ( tweet.getString("message")) & ( tweet.getString("datetime")) & ( tweet.getDouble("latitude")) &    ( tweet.getDouble("longitude"));

您希望对 JSON 数组的每个元素都执行此操作,因此请在 for 循环内移动该行。此外,参数应该用逗号分隔,而不是和号。您还应该为 new Tweet 使用大写 T(以引用您应该创建的构造函数)。

为:

Tweet.list.add(t);

这当前期望list 成为Tweet 的(静态)成员。尝试更改此设置以访问您应该为ArrayList 指定的名称。出于与上述相同的原因,该行也应该在 for 循环内。

【讨论】:

  • 只是为了记录,在Java中,空的构造函数不是强制性的。如果未定义,Java 默认提供一个空的。
  • 确实如此,但更进一步的是尝试使用非默认构造函数。你说得对,我会更清楚。
  • 无法找到您正在谈论的代码,但它仍然是 OP 的 FYI
  • 接近底部:t = new tweet( tweet.getString("id")) &amp; ( tweet.getString("message")) &amp; ( tweet.getString("datetime")) &amp; ( tweet.getDouble("latitude")) &amp; ( tweet.getDouble("longitude"));
  • 哦..tweet不是JSONObject吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-16
相关资源
最近更新 更多