Java Gson正在分析没有键值对的字符串

Java Gson正在分析没有键值对的字符串,java,string,parsing,gson,Java,String,Parsing,Gson,我试图用Gson库解析字符串,但没有成功。这是我的字符串: [["-1.816513","52.5487566"],["-1.8164913","52.548824"]] 本例中的问题是没有键值对。我查看了其他示例,但它们都有键值对,看起来不像是我的问题。我解析字符串列表的解决方案 package stackoverflow.answers; import java.lang.reflect.Type; import java.util.List; import com.google.gs

我试图用Gson库解析字符串,但没有成功。这是我的字符串:

[["-1.816513","52.5487566"],["-1.8164913","52.548824"]]

本例中的问题是没有键值对。我查看了其他示例,但它们都有键值对,看起来不像是我的问题。

我解析字符串列表的解决方案

package stackoverflow.answers;

import java.lang.reflect.Type;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class GsonTest {

  public static void main(String[] arg) {

    Gson gson = new Gson();
    String jsonOutput = "[[\"-1.816513\",\"52.5487566\"],[\"-1.8164913\",\"52.548824\"]]";
    Type listType = new TypeToken<List<List<String>>>() {}.getType();
    List<List<String>> strings = (List<List<String>>) gson.fromJson(jsonOutput, listType);
    for(List<String> inner: strings){
      for(String s: inner){
        System.out.println(s);
      }
    }

  }
}
package stackoverflow.answers;
导入java.lang.reflect.Type;
导入java.util.List;
导入com.google.gson.gson;
导入com.google.gson.reflect.TypeToken;
公共类GsonTest{
公共静态void main(字符串[]arg){
Gson Gson=新的Gson();
字符串jsonOutput=“[\”-1.816513\,\“52.5487566\”],[\”-1.8164913\,\“52.548824\”];
类型listType=newTypeToken(){}.getType();
List strings=(List)gson.fromJson(jsonOutput,listType);
用于(列表内部:字符串){
用于(字符串s:内部){
系统输出打印项次;
}
}
}
}
但由于值也可以被“认为”是双精度的,所以您可以直接解析它们,将类型更改为解决方案:

package stackoverflow.answers;

import java.lang.reflect.Type;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class GsonTest {

  public static void main(String[] arg) {

    Gson gson = new Gson();
    String jsonOutput = "[[\"-1.816513\",\"52.5487566\"],[\"-1.8164913\",\"52.548824\"]]";
    Type listType = new TypeToken<List<List<Double>>>() {}.getType();
    List<List<Double>> numbers = (List<List<Double>>) gson.fromJson(jsonOutput, listType);
    for(List<Double> inner: numbers){
      for(Double d: inner){
        System.out.println(d);
      }
    }

  }
}
package stackoverflow.answers;
导入java.lang.reflect.Type;
导入java.util.List;
导入com.google.gson.gson;
导入com.google.gson.reflect.TypeToken;
公共类GsonTest{
公共静态void main(字符串[]arg){
Gson Gson=新的Gson();
字符串jsonOutput=“[\”-1.816513\,\“52.5487566\”],[\”-1.8164913\,\“52.548824\”];
类型listType=newTypeToken(){}.getType();
List number=(List)gson.fromJson(jsonOutput,listType);
用于(列表内部:编号){
用于(双d:内部){
系统输出打印ln(d);
}
}
}
}

在上下文中不重要,但供将来参考:Java 7、Gson 2.2.4一个解决方案,原始类型:

package com.stackoverflow.so18525283;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.util.List;

public class App {

    private static final String INPUT = "[[\"-1.816513\",\"52.5487566\"],[\"-1.8164913\",\"52.548824\"]]";

    public static void main(final String[] args) {
        final Gson gson = new GsonBuilder().create();
        final List<?> fromJson = gson.fromJson(INPUT, List.class);
        if (fromJson != null && fromJson.size() > 0 && fromJson.get(0) instanceof List) {
            System.out.println(((List<?>) fromJson.get(0)).get(0)); // this is a String
        }
    }
}

我想可能是我更新了我关于Dublication的问题。但我同意OP,这不是一个候选人关闭重复,至少不是为原来的链接。这是一个具有完全不同解决方案的独立问题。“package com.stackoverflow.so18525283;”很好!我冒昧地复制了您的包命名样式:)类型解析,nice=>+1Thanks trapo。在使用字符串而不是双重类型后,它起了作用。在我看来,它们似乎是双重的;):)当然他们应该有,但在这种形式下,它给出了一个错误:应该是BEGIN_数组,但在第1行第3列是字符串,因为我很好奇。你使用的是和我一样的Gson版本吗?此外,你确定你没有额外的“?
public static void main(String[] args) {
    final Gson gson = new GsonBuilder().create();
    final Foo fromJson = gson.fromJson("{ data: " + INPUT + "}", Foo.class);
    // TODO: check for null
    System.out.println(fromJson.data.get(0).get(0)); // this is a Double
}

private static class Foo {
    List<List<Double>> data;
}