【问题标题】:How to deserialize an PHP array with GSON如何使用 GSON 反序列化 PHP 数组
【发布时间】:2011-02-23 22:28:10
【问题描述】:

在 PHP 中,我使用 json_encode 序列化一个数组,我尝试使用 GSON 在我的 Android 设备上读取该数组。但 Android 会因致命异常而崩溃。我无法让它与我见过的任何例子一起工作。我认为这是由 JSON 字符串引起的。它从数组的索引开始(在下面的示例中为 19 和 17),我还没有看到任何此类 JSON 字符串的示例。我看到的所有示例都以属性名称而不是索引/ cpunter 开头。

这是我的 JSON 示例:

{"19":{"id":"1262","username":"abc","telnr":"0123456789","created":"Sun, 2010 年 8 月 8 日 10:29:06 +0200","email":"e@mail.com","code":null},"17":{"id":"1259","username":"cdef","telnr":"9876543210 ","创造":"太阳, 2010 年 8 月 8 日 10:29:06 +0200","email":"mail@domain.com","code":null},

在许多其他组合中,我尝试了以下两个示例:

Type listType = new TypeToken<List<String>>(){}.getType(); 
List<String> personList = new Gson().fromJson(json, listType);

Type playerType = new TypeToken<List<Player>>(){}.getType(); 
List<Player> players = new Gson().fromJson(json.toString(), playerType);

我收到以下错误:

threadid=1: thread exiting with uncaught exception
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{...}:java.lang.NullPointerException

我有一个 Player 类/bean,可以保存 id、username、telnr、created、email 和 code 属性。我希望有人可以为我提供一个适用于这个 JSON 字符串的 GSON 代码示例。谢谢。

【问题讨论】:

  • 你解决了吗?

标签: java php gson


【解决方案1】:

JSON 对象中的属性名称(上面的“19”和“17”)必须是有效的 Javascript 标识符。它们只能包含字母、数字、下划线和美元符号,但它们不能以数字开头。您必须分配不同的键或完全删除键以形成 Javascript 数组。

$values = array_values($arrayWithKeys);

【讨论】:

  • 感谢您的评论。我不知道 JSON 字符串可能不是以数字开头,但是这个索引中的问题对我来说已经相当清楚了。您提供的解决方案不起作用,它实际上是在它前面添加一个索引 {"0":"19","...etc.} 我现在正在寻找另一个方向以提供正确类型的 JSON 字符串, 没有索引。非常感谢您的帮助。
  • 在将原始数组转换为 JSON 之前添加一个 var_dump()。鉴于 JSON,我希望我的建议能够奏效。
猜你喜欢
  • 1970-01-01
  • 2015-02-24
  • 2011-03-28
  • 1970-01-01
  • 2013-02-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
相关资源
最近更新 更多