Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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
Android 将一个字段从嵌套Json解析为字符串值_Android_Json_Sqlite_Gson - Fatal编程技术网

Android 将一个字段从嵌套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 =

我的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"
 }
}

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你可以照这个做