我正在尝试使用Gson从JSON字符串中检索元素。我想得到正确类型的数字,但Gson给出整数作为双值。
这是我的代码:
String jsonString = "{'symbol':'WSO2','price':55.6,'volume':100}";
Object json = new Gson().fromJson(eventObject.toString(),Object.class);
如何解析JSON字符串以获得正确格式的数字?
谢谢!
答案 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 是:
在Gson中,你不能通过反序列化到java.lang.Object
来实现这一点,因为对于这种类型,Gson使用始终为parses a numeric value as a double的ObjectTypeAdapter
,最大的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()
等。