2017-04-02 10 views
-1

私は私のAPIレスポンスに一つのフィールドのネストされたJSONを持っている:パースつのフィールド

"ratingBest": 10, 
"reviewCount": 1, 
"coordinate": { 
    "latitude": "-7.2768", 
    "longitude": "112.7927" 
}, 
... 

私はORMLiteを使用してAndroidのローカルDBに上記のデータを保存するが、私はただ一つのフィールドcoordinateになりたいですString。原因Gsonは特定のタイプで自動的に変換します。

私はすでにStringとしてクラスフィールド型を使用しようとしています。しかし、まだ動作していません

これに対する回避策はありますか?

ありがとうございます

+0

あなたはどのようにしていますか?状況を成就させるために? Gsonでモデルをどこに保存していますか? –

+0

まだ実装されていません。しかし、私はAndroidでORMLiteヘルパーを使用し、APIからのJsonレスポンスをパラメータとして 'create()'メソッドを呼び出すだけです。そして、私は 'String'という名前で保存された1つのフィールド' coordinate'を必要とします.Gsonはそれぞれの応答を特定のタイプに自動的に変換します。 – fanjavaid

答えて

0

これを試してください。

var a = { 
    "ratingBest": 10, 
    "reviewCount": 1, 
    "coordinate": { 
    "latitude": "-7.2768", 
    "longitude": "112.7927" 
} 
} 

var b = { 
    "ratingBest": 10, 
    "reviewCount": 1, 
    "coordinate": JSON.stringify(a.coordinate) 
} 

は今、あなたは、次の方法でこれを行うことができます

+0

私はJavascriptではなく、AndroidのJsonについて質問します。 Androidでは、 'create()'メソッドを使用して自動的にAPIからの応答を格納するためにORMLiteを使用します。そして、私はまだ、「弦」として保存される1つのフィールド以外にはまだ見つかりませんでした。私はあなたが私の意味を理解してくれることを願っていますおかげで – fanjavaid

0

bを格納します。

myObj = { 
    "ratingBest": 10, 
    "reviewCount": 1, 
    "coordinate": { 
    "latitude": "-7.2768", 
    "longitude": "112.7927" 
     } 
    } 
var latitudex = myObj.coordinate.latitude; 
var longitudex = myObj.coordinate.longitude; 

それはあなたを助けることを願っています。

+0

ありがとうございますが、私はGsonの実装について尋ねます。 Java – fanjavaid

+0

@fanjavaidあなたはこれに続くことができます[generate-json-from-java-objects](http://tutorials.jenkov.com/java-json/gson.html#generating-json-from-java-objects) –

2

あなたは何がそれに言及し、あなたの「行が」のようなものであると考えられる行われないので、私は、あなたがどのような方法で緯度/経度のペアを処理するつもりはないと仮定しています:

final class Location { 

    final int ratingBest = Integer.valueOf(0); 

    final int reviewCount = Integer.valueOf(0); 

    @JsonAdapter(PackedCoordinateTypeAdapter.class) 
    final String coordinate = null; 

} 

特定のタイプのアダプタをフィールドにバインドする@JsonAdapterアノテーションを見てください。タイプのアダプタは、次のようになります。

final class PackedCoordinateTypeAdapter 
     extends TypeAdapter<String> { 

    private static final String DELIMITER = " "; 
    private static final String LATITUDE = "latitude"; 
    private static final String LONGITUDE = "longitude"; 

    private static final Pattern delimiterPattern = compile(DELIMITER); 

    // Keep private stuff private as much possible, Gson can access it 
    private PackedCoordinateTypeAdapter() { 
    } 

    @Override 
    @SuppressWarnings("resource") 
    public void write(final JsonWriter out, final String packedLatitudeLongitude) 
      throws IOException { 
     final String[] split = decode(packedLatitudeLongitude); 
     out.beginObject(); 
     out.name(LATITUDE); 
     out.value(split[0]); 
     out.name(LONGITUDE); 
     out.value(split[1]); 
     out.endObject(); 
    } 

    @Override 
    public String read(final JsonReader in) 
      throws IOException { 
     String latitude = null; 
     String longitude = null; 
     in.beginObject(); 
     while (in.hasNext()) { 
      final String name = in.nextName(); 
      switch (name) { 
      case LATITUDE: 
       latitude = in.nextString(); 
       break; 
      case LONGITUDE: 
       longitude = in.nextString(); 
       break; 
      default: 
       throw new MalformedJsonException("Unexpected: " + name); 
      } 
     } 
     in.endObject(); 
     return encode(latitude, longitude); 
    } 

    private static String encode(final String latitude, final String longitude) 
      throws MalformedJsonException { 
     if (latitude == null) { 
      throw new MalformedJsonException("latitude not set"); 
     } 
     if (longitude == null) { 
      throw new MalformedJsonException("longitude not set"); 
     } 
     return latitude + DELIMITER + longitude; 
    } 

    private static String[] decode(final String packedLatitudeLongitude) 
      throws IllegalArgumentException { 
     final String[] split = delimiterPattern.split(packedLatitudeLongitude); 
     if (split.length != 2) { 
      throw new IllegalArgumentException("Cannot parse: " + packedLatitudeLongitude); 
     } 
     return split; 
    } 

} 

デモ:

final Location response = gson.fromJson("{\"ratingBest\":10,\"reviewCount\":1,\"coordinate\":{\"latitude\":\"-7.2768\",\"longitude\":\"112.7927\"}}", Location.class); 
System.out.println(response.coordinate); 
System.out.println(gson.toJson(response)); 

出力:

-7.2768 112.7927
{ "ratingBest":10、 "reviewCount":1、 "coordinate":{"緯度": " - 7.2768"、 "経度": "112.7927"}