【问题标题】:Android JAVA : Convert org.json.JSONArray to java.lang.String[]Android JAVA:将 org.json.JSONArray 转换为 java.lang.String[]
【发布时间】:2020-11-14 23:18:59
【问题描述】:

我正在使用一个 Android 应用程序,当从服务器同步日期时,数据作为 json 字符串接收,首先使用
JSONObject jsonObject = new JSONObject("jsonStringFromServer") 将其转换为 JSONObject,而这个 jsonObject 有一堆 key:value集合,其中value 的形式为JSONArray,如
{"id1":["stringa1","stringa2","stringa3"], "id2":["stringb1","stringb2","stringb3"], "id3":["stringc1","stringc2","stringc3"]}

我需要将这个JSONArray 转换成一个简单的String[],当我尝试使用简单的(String[]) jsonObject.get("id1") 进行转换时,我得到了这个错误java.lang.ClassCastException: org.json.JSONArray cannot be cast to java.lang.String[]

我环顾四周,但未能找到类似于如何在 java 中将 ArrayList 转换为 String[] 的简单解决方案。任何他都会高度赞赏

【问题讨论】:

  • 请分享代码。
  • 感谢@The_Humble_Fool,这意味着首先从 JSONArray 创建一个 ArrayList(因为我不知道它的长度),然后从这个 ArrayList 创建 String[]?由于数据量很大,我希望找到一些直接的方法并尽量减少所花费的时间。我也曾想过使用 ObjectSerializer 首先在服务器端序列化 Array(原始数据为 String[] 形式),然后在 Android 内部反序列化。对哪种方法更好的方法有何评论?
  • @AlwaysaLearner developer.android.com/reference/org/json/JSONArray#length() 它有一个可以在构造数组时调用的长度方法。这将帮助您获得正确的尺寸并将物品推入其中。不需要额外创建 ArrayList。
  • @AlwaysaLearner 我不是该领域的专家。我建议是否实施分页并分批获取数据以及当用户要求下一批时。这将有助于减轻客户的负担。随着新数据的不断涌现,您可以在客户端缓存数据。

标签: java android arrays string


【解决方案1】:

JsonArray 与 Java 的数组不同。您不能通过强制转换将 JsonArray 转换为常规 Java 数组。您可以做的是,通过迭代 JsonArray 将对象从 JsonArray 提取到常规 Java 数组中。

【讨论】:

  • 这与您的评论一起对我很有用...
【解决方案2】:

您可以使用流从 json 数组中收集数据,根据需要修改代码。下面的代码应该会给你一个概览。

List<String> values = IntStream.range(0, jsonArray.length())
                .mapToObj(i -> array.getJSONObject(i).get("key").toString()).collect(Collectors.toList());

【讨论】:

  • 谢谢,但我发现这有点令人困惑,无法正常工作。使用 JSONArray 长度的简单迭代是我的方式......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
  • 2013-06-30
  • 2021-09-12
相关资源
最近更新 更多