使用Gson从JSON字符串中提取正确格式的数字

时间:2017-04-20 04:47:09

标签: java json numbers gson

我正在尝试使用Gson从JSON字符串中检索元素。我想得到正确类型的数字,但Gson给出整数作为双值。

这是我的代码:

String jsonString = "{'symbol':'WSO2','price':55.6,'volume':100}";
Object json = new Gson().fromJson(eventObject.toString(),Object.class);

如何解析JSON字符串以获得正确格式的数字?

谢谢!

2 个答案:

答案 0 :(得分:1)

所以我要说的第一件事就是你不应该将json解析为Object。对象可以是任何东西。您应该按照JB Nizet的建议进行操作,并使用您想要的类型定义自己的类。这样的事情。

<?php
    include('conn.php');
    $student_id = $_SESSION['student_id'];
    $college_name = $_GET['college_name'];
    $college_name22 = explode('(', $college_name);
    if(preg_match('#\((.*?)\)#', $college_name, $match))
    {
        $match[1] = lcfirst($match[1]);
    }
    else
    {
        $match[1] = 'All';
    }

Gson将使用构造函数来获取类中的数据,然后您可以使用getter来检索数据。显然,您需要重命名该类以匹配数据所代表的内容。然后,您应该将之前的代码更改为此类代码。

cstest/view.php?college_name=Agra%20Public%20Institute%20of%20Technology%20&%20Computer%20Education,%20Artoni%20(Pharmacy)

然后,您可以使用getter访问数据,它们的类型将正确。

答案 1 :(得分:1)

JSON不区分仅定义单个数字类型的数字类型:数字。如果您可以将 100 的值视为整数,...或者long,double或float,这取决于您 解释它的方式,这是一个明显的歧义。从另一个角度看以下讨论中的更多内容:How to get value as java.lang.Object from Gson?:JSON语法的摘录:

    • 字符串
    • 物体
    • 阵列

其中 number 是:

    • INT
    • int frac
    • int exp
    • int frac exp

在Gson中,你不能通过反序列化到java.lang.Object来实现这一点,因为对于这种类型,Gson使用始终为parses a numeric value as a doubleObjectTypeAdapter,最大的Java编号JsonReader是为:

public final class ObjectTypeAdapter extends TypeAdapter<Object> {
...

    @Override public Object read(JsonReader in) throws IOException {
...
        case NUMBER:
            return in.nextDouble();
...

使用它最安全的事情就是提取值并将其转换为java.lang.Number(您可能将其视为“未知”数字)并使用其方法,如intValue(),{{在呼叫站点1}},longValue()等。