本地化的小数点分隔符,我用Jackson分析输入流包含经纬度值,如这里:如何反序列化浮点值与杰克逊
{
"name": "product 23",
"latitude": "52,48264",
"longitude": "13,31822"
}
出于某种原因,服务器使用
逗号作为
产生InvalidFormatException
的小数点分隔符。由于我无法更改服务器输出格式,因此我想教授Jackson的ObjectMapper
来处理这些情况。下面是相关代码:
public static Object getProducts(final String inputStream) {
ObjectMapper objectMapper = new ObjectMapper();
try {
return objectMapper.readValue(inputStream,
new TypeReference<Product>() {}
);
} catch (UnrecognizedPropertyException e) {
e.printStackTrace();
} catch (InvalidFormatException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (JsonParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
这里是POJO:
import com.fasterxml.jackson.annotation.JsonProperty;
public class Product {
@JsonProperty("name")
public String name;
@JsonProperty("latitude")
public float latitude;
@JsonProperty("longitude")
public float longitude;
}
我怎么能告诉杰克逊,这些坐标值都配有德文场所?
我想a custom deserializer for the specific fields as discussed here将是要走的路。我起草了这一点:
public class GermanFloatDeserializer extends JsonDeserializer<Float> {
@Override
public Float deserialize(JsonParser parser, DeserializationContext context)
throws IOException {
// TODO Do some comma magic
return floatValue;
}
}
然后POJO是这样的:
import com.fasterxml.jackson.annotation.JsonProperty;
public class Product {
@JsonProperty("name")
public String name;
@JsonDeserialize(using = GermanFloatDeserializer.class, as = Float.class)
@JsonProperty("latitude")
public float latitude;
@JsonDeserialize(using = GermanFloatDeserializer.class, as = Float.class)
@JsonProperty("longitude")
public float longitude;
}
你有什么是无效的JSON。让提供JSON的人为你提供合法的东西。 – 2014-11-05 00:33:19
@HotLicks由于小数点分隔符','是否无效?如果你的意思是后面的逗号 - 这是我忘记输入的内容,我修正了它。 – JJD 2014-11-05 09:40:19
逗号小数点无效JSON。你可以去json.org并查看语法。可能会出现逗号,因为不知何故,您对服务器的请求意味着一个语言环境,并且更改该隐含的语言环境可以解决该问题,但否则,另一端的人应该修复它。 – 2014-11-05 12:03:49