使用 JSON (GSON) 将 PHP 关联数组传输到 Java Map<String, Double>


Transfer PHP associative array to Java Map<String, Double> using JSON (GSON)

我正在使用PHP将JSON编码的关联数组返回给客户端。该数组是通过循环遍历 MySQL 数据库查询的结果集来构造的。为简单起见,假设查询的一个可能输出在 PHP 中生成以下关联数组,而不是显示返回结果集的所有代码:

$ResultRows = array(
    "10 m" => 10,
    "100 m" => 100,
    "1000 m" => 1000
);
echo json_encode($ResultRows);

json_encode生成的 JSON 字符串如下所示:

{"10 m":10,"100 m":100,"1000 m":1000}

如您所见,它像对象一样编码,每个键值对看起来像一个属性名称和值。

现在,运行 Java 的客户端接收此 JSON 编码字符串。我想创建一个由这些值填充的LinkedHashMap<String, Double>实例。但是,由于它不像数组那样编码,我很难看到如何使用 GSON 来解码它。有什么想法吗?

我可以简单地更改 PHP 并创建一个包含键/值对的简单对象并返回这些对象的常规数组,但如果可能的话,我希望不要理会 PHP 脚本,因为其中有很多需要更改。

您可以使用

TypeToken 类为 fromJson 方法提供一个类型,因此它将如下所示:

public class Test {
    public static void main(String[] args) {
        String json ="{'"10 m'":10,'"100 m'":100,'"1000 m'":1000}";
        LinkedHashMap<String, Double> map = new Gson().fromJson(json, new TypeToken<LinkedHashMap<String, Double>>(){}.getType());
        System.out.println(map);
    }
}

哪个输出:

{10 m=10.0, 100 m=100.0, 1000 m=1000.0}