JSON java 中的字符串解析
JSON String parsing in java
我将一个字符串传递给一个方法,我需要将它反序列化为一个对象,但我将 运行 保存到 JSON 映射异常中。
private static final ObjectMapper mapper = new ObjectMapper();
public ArrayList<Double> parseVector(String json){
Vector vector = new Vector();
try {
vector = mapper.readValue(json, TypeFactory.collectionType(ArrayList.class, Vector.class));
} catch ETC ........
还需要注意的是,Vector是一个内部class,设置如下:
static class Vector{
@JsonProperty("P")
public Double performance;
@JsonProperty("M")
public Double margin;
@JsonProperty("I")
public Double pace;
}
对于此示例,json 的值是:
{'P':8,'M':2,'I':0}
我遇到了这个异常:
JSONDeserializer : getVectorMap() JsonMappingException :
org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
at [Source: java.io.StringReader@77d65595; line: 1, column: 1]
任何人都可以给我一些见解吗?
Jackson 无法反序列化非静态内部 classes。存在此约束是因为没有通用的方法来实例化此类 classes,因为内部 class 没有默认构造函数。然而,序列化工作正常。
This post提供更详细的推理:
注意一个内部class可以访问外部class的所有成员变量。当我们编写如下代码时
public class Outer {
// non-static
class Inner {
}
}
编译器生成类似于
的东西
public class Outer { ... }
class Outer$Inner {
private final Outer parent;
Outer$Inner(Outer p) {
parent = p;
}
}
你的新错误来自于
vector = mapper.readValue(json, TypeFactory.collectionType(ArrayList.class, Vector.class));
告诉 Jackson 从 json
反序列化一个 ArrayList<Vector>
。您的 json
值包含一个 JSON 对象。 List
类型只能从 JSON 数组反序列化。
只需使用
vector = mapper.readValue(json, Vector.class);
我将一个字符串传递给一个方法,我需要将它反序列化为一个对象,但我将 运行 保存到 JSON 映射异常中。
private static final ObjectMapper mapper = new ObjectMapper();
public ArrayList<Double> parseVector(String json){
Vector vector = new Vector();
try {
vector = mapper.readValue(json, TypeFactory.collectionType(ArrayList.class, Vector.class));
} catch ETC ........
还需要注意的是,Vector是一个内部class,设置如下:
static class Vector{
@JsonProperty("P")
public Double performance;
@JsonProperty("M")
public Double margin;
@JsonProperty("I")
public Double pace;
}
对于此示例,json 的值是:
{'P':8,'M':2,'I':0}
我遇到了这个异常:
JSONDeserializer : getVectorMap() JsonMappingException :
org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
at [Source: java.io.StringReader@77d65595; line: 1, column: 1]
任何人都可以给我一些见解吗?
Jackson 无法反序列化非静态内部 classes。存在此约束是因为没有通用的方法来实例化此类 classes,因为内部 class 没有默认构造函数。然而,序列化工作正常。
This post提供更详细的推理:
注意一个内部class可以访问外部class的所有成员变量。当我们编写如下代码时
public class Outer {
// non-static
class Inner {
}
}
编译器生成类似于
的东西public class Outer { ... }
class Outer$Inner {
private final Outer parent;
Outer$Inner(Outer p) {
parent = p;
}
}
你的新错误来自于
vector = mapper.readValue(json, TypeFactory.collectionType(ArrayList.class, Vector.class));
告诉 Jackson 从 json
反序列化一个 ArrayList<Vector>
。您的 json
值包含一个 JSON 对象。 List
类型只能从 JSON 数组反序列化。
只需使用
vector = mapper.readValue(json, Vector.class);