Android 将一个字段从嵌套Json解析为字符串值
我的API响应中有一个字段嵌套了JSON:Android 将一个字段从嵌套Json解析为字符串值,android,json,sqlite,gson,Android,Json,Sqlite,Gson,我的API响应中有一个字段嵌套了JSON: "ratingBest": 10, "reviewCount": 1, "coordinate": { "latitude": "-7.2768", "longitude": "112.7927" }, ... 我使用ORMLite将上述数据保存到Android本地数据库中,但我只希望一个字段坐标为字符串。导致Gson在特定类型中自动转换 我已经尝试使用类字段类型作为字符串。但仍然不起作用 有解决办法吗 谢谢试试这个 var a =
"ratingBest": 10,
"reviewCount": 1,
"coordinate": {
"latitude": "-7.2768",
"longitude": "112.7927"
},
...
我使用ORMLite将上述数据保存到Android本地数据库中,但我只希望一个字段坐标
为字符串
。导致Gson在特定类型中自动转换
我已经尝试使用类字段类型作为字符串。但仍然不起作用
有解决办法吗
谢谢试试这个
var a = {
"ratingBest": 10,
"reviewCount": 1,
"coordinate": {
"latitude": "-7.2768",
"longitude": "112.7927"
}
}
var b = {
"ratingBest": 10,
"reviewCount": 1,
"coordinate": JSON.stringify(a.coordinate)
}
现在存储b您可以通过以下方式执行此操作:
myObj = {
"ratingBest": 10,
"reviewCount": 1,
"coordinate": {
"latitude": "-7.2768",
"longitude": "112.7927"
}
}
var latitudex = myObj.coordinate.latitude;
var longitudex = myObj.coordinate.longitude;
希望它能对您有所帮助。我假设您不会以任何方式处理纬度/经度对,因为您没有提到它,您的“行”应该是这样的:
最终类位置{
最终整数评级最佳=整数。值(0);
final int reviewCount=整数。值为(0);
@JsonAdapter(packedCoordinationTypeAdapter.class)
最终字符串坐标=空;
}
查看将特定类型适配器绑定到字段的@JsonAdapter
注释。类型适配器可能如下所示:
最终类包坐标类型适配器
扩展类型适配器{
私有静态最终字符串分隔符=”;
私有静态最终字符串LATITUDE=“LATITUDE”;
私有静态最终字符串经度=“经度”;
私有静态最终模式delimiterPattern=compile(分隔符);
//尽可能保持隐私,Gson可以访问它
私有packedCoordinationTypeAdapter(){
}
@凌驾
@抑制警告(“资源”)
public void write(最终JsonWriter out、最终字符串packedLatitudeLongitude)
抛出IOException{
最终字符串[]拆分=解码(packedLatitudeLongitude);
out.beginObject();
out.名称(纬度);
out.值(拆分[0]);
out.name(经度);
价值(拆分[1]);
out.endObject();
}
@凌驾
公共字符串读取(中的最终JsonReader)
抛出IOException{
字符串纬度=空;
字符串经度=空;
in.beginObject();
while(在.hasNext()中){
最终字符串名称=in.nextName();
交换机(名称){
案例纬度:
纬度=in.nextString();
打破
案例经度:
经度=in.nextString();
打破
违约:
抛出新的MalformedJsonException(“意外:+name”);
}
}
in.endObject();
返回编码(纬度、经度);
}
专用静态字符串编码(最终字符串纬度、最终字符串经度)
抛出格式不正确的异常{
如果(纬度==null){
抛出新的MalformedJsonException(“未设置纬度”);
}
如果(经度==null){
抛出新的MalformedJsonException(“未设置经度”);
}
返回纬度+分隔符+经度;
}
私有静态字符串[]解码(最终字符串包LatitudeLongitude)
抛出IllegalArgumentException{
最终字符串[]split=delimiterPattern.split(packedLatitudeLongitude);
如果(拆分长度!=2){
抛出新的IllegalArgumentException(“无法解析:+packedLatitudeLongitude”);
}
收益分割;
}
}
演示:
final Location response=gson.fromJson(“{\'ratingBest\”:10,\'reviewCount\”:1,\'coordinate\:{\'latitude\”:“-7.2768\”,\'longitude\”:\'112.7927\”},Location.class);
System.out.println(响应.协调);
System.out.println(gson.toJson(response));
输出:
-7.2768112.7927{“ratingBest”:10,“reviewCount”:1,“坐标”:{“纬度”:“-7.2768”,“经度”:“112.7927”}
你是如何设法解决这个问题的?您在哪里使用Gson保存模型?尚未实现。但对于正常的响应,我在Android中使用ORMLite helper,只需使用API的Json响应作为参数调用
create()
方法。我想要一个字段坐标
另存为字符串
,因为Gson会自动将每个响应转换为特定类型。哈哈,我问的是Android
中的Json,而不是Javascript。在Android中,我使用ORMLite自动存储API的响应,使用create()
方法。除了一个要保存为String
的字段外,我还没有找到其他字段。我希望你明白我的意思。谢谢,但我想问一下Gson的实现。Java@fanjavaid你可以照这个做