Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中解码用GSON创建的JSON文件?_Java_Json_Encoding_Character Encoding_Gson - Fatal编程技术网

如何在Java中解码用GSON创建的JSON文件?

如何在Java中解码用GSON创建的JSON文件?,java,json,encoding,character-encoding,gson,Java,Json,Encoding,Character Encoding,Gson,我已经用gson成功地创建了一个JSON文件,但是现在我想解析同一个文件,所以编码变得一团糟 这是我用来读取JSON文件的代码: BufferedReader jsonFile = new BufferedReader(new FileReader("file.json")); Map<String, List<long[]>> trafficInput = new HashMap<>(); trafficInput = gson.fromJson(jsonF

我已经用gson成功地创建了一个JSON文件,但是现在我想解析同一个文件,所以编码变得一团糟

这是我用来读取JSON文件的代码:

BufferedReader jsonFile = new BufferedReader(new FileReader("file.json"));
Map<String, List<long[]>> trafficInput = new HashMap<>();
trafficInput = gson.fromJson(jsonFile, HashMap.class);
…按如下方式进行分析:

{"paris":[[1.4859072E12,1.82184411E8,41274.0],[1.4859936E12,1.51646118E8,36697.0],"london":[[1.4859072E12,3.020016E7,155827.0]}
这将打乱代码的其余部分,因为long不再是long了

例如,如果我尝试打印一个值,如下所示:

System.out.println(trafficInput.get("paris").get(0)[0]);
。。。我得到这个错误:

Exception in thread "main" java.lang.ClassCastException: java.util.ArrayList cannot be cast to [J

有什么帮助吗

发生这种情况的原因如下:

trafficInput = gson.fromJson(jsonFile, HashMap.class);
此行指示
gson
将字符串反序列化为
HashMap
,而不指定任何类型,因此,
gson
应用其默认转换机制(即将
Number
转换为
double
等)。这就是为什么
Sysout
语句会导致
ClassCastException
,因为该元素不是
数组

您所需要做的就是在调用
fromJson
方法时指定
TypeToken
,它将处理类型。e、 g:

Gson gson = new Gson();
Type type = new TypeToken<Map<String, List<long[]>>>(){}.getType();
Map<String, List<long[]>> trafficInput = new HashMap<>();
trafficInput = gson.fromJson("{\"paris\":[[1485907200000,182184411,41274],[1485993600000,151646118,36697]],\"london\":[[1485907200000,30200160,155827]]}", type);
System.out.println(trafficInput);
System.out.println(gson.toJson(trafficInput));
Gson-Gson=new-Gson();
Type Type=new-TypeToken(){}.getType();
Map trafficInput=新建HashMap();
trafficInput=gson.fromJson(“{”paris\”:[14859072000018218441141274],[1485993600000164611836697],“london\”:[14859072000030200160155827]},类型);
System.out.println(流量输入);
System.out.println(gson.toJson(trafficInput));

上面的代码片段不使用科学符号打印数字。

发生这种情况是因为以下行:

trafficInput = gson.fromJson(jsonFile, HashMap.class);
此行指示
gson
将字符串反序列化为
HashMap
,而不指定任何类型,因此,
gson
应用其默认转换机制(即将
Number
转换为
double
等)。这就是为什么
Sysout
语句会导致
ClassCastException
,因为该元素不是
数组

您所需要做的就是在调用
fromJson
方法时指定
TypeToken
,它将处理类型。e、 g:

Gson gson = new Gson();
Type type = new TypeToken<Map<String, List<long[]>>>(){}.getType();
Map<String, List<long[]>> trafficInput = new HashMap<>();
trafficInput = gson.fromJson("{\"paris\":[[1485907200000,182184411,41274],[1485993600000,151646118,36697]],\"london\":[[1485907200000,30200160,155827]]}", type);
System.out.println(trafficInput);
System.out.println(gson.toJson(trafficInput));
Gson-Gson=new-Gson();
Type Type=new-TypeToken(){}.getType();
Map trafficInput=新建HashMap();
trafficInput=gson.fromJson(“{”paris\”:[14859072000018218441141274],[1485993600000164611836697],“london\”:[14859072000030200160155827]},类型);
System.out.println(流量输入);
System.out.println(gson.toJson(trafficInput));

上面的代码片段不使用科学符号打印数字。

这可能只是
toString
实现的
List/long
,您是否尝试遍历列表打印单个值?我尝试过,但出现了错误。它说列表/长不能作为长遍历。但是字符串也不起作用。
System.out.println(trafficInput.get(“paris”).get(0)[0])这打印什么?另外,你能分享文件的内容吗?(至少有一行包含“Paris”的所有详细信息)?在尝试打印输出命令时,我得到以下错误:“线程中的异常”main“java.lang.ClassCastException:java.util.ArrayList无法转换为[J”这可能只是
toString
实现的
List/long
,您是否尝试过遍历打印单个值的列表?我尝试过了,但出现了一个错误。它说列表/long不能作为long进行迭代。但是字符串也不起作用。
System.out.println(trafficInput.get(“paris”).get(0)[0]))
这打印什么?另外,您可以共享文件的内容吗?(至少有一行包含“Paris”的所有详细信息)?在尝试打印输出命令时,我遇到以下错误:“线程中的异常”main“java.lang.ClassCastException:java.util.ArrayList无法转换为[J”