2017-03-21 8 views
1

をArrayListには、私は/パースにjava.lang.Objectのこの種のを変換し、java.lang.Object上位の配列または一覧できる方法はあります:java.lang.Object上位

[ 
    {procedure_name_txt=nameText, procedure_name_ets_id=ID-1234, procedure_ets_desc=description_123}, 
    {procedure_name_txt=deafness, procedure_name_ets_id=ID-99022, procedure_ets_desc=description_31222} 
] 

はすでにGsonを使用してみました残念ながら、オブジェクト形式はjson形式ではありません。

+2

@HovercraftFullOfEels JSONない:キー/値には二重引用符。 =の代わりに= – jonrsharpe

+0

@johnありがとう、コメントが削除されました –

答えて

1

あなたが提供してきた文書は、いくつかの理由有効なJSONではありません。

  • 配列要素のキーは引用符"で囲まれていません。
  • 配列要素のキーと値のペアは、:で区切られていませんが、区切りは=です。
  • 文字列の値は、引用符で囲まれていません"

私は、文書が実際に要素であり、マップやPOJOのいずれかtoStringで上書きコレクション/配列のかわいいプリントtoString結果であり、ほぼ確信しています。このような出力はであり、プログラムで解析されることは決してではありません。しかし、GsonはJSON形式の文法に違反していて、簡単にtoenlingしているため、 "tostring"という結果を解析できます。

final class Procedure { 

    @SerializedName("procedure_name_txt") 
    final String name = null; 

    @SerializedName("procedure_name_ets_id") 
    final String id = null; 

    @SerializedName("procedure_ets_desc") 
    final String description = null; 

    @Override 
    public String toString() { 
     return new StringBuilder("Procedure{") 
       .append("name='").append(name).append('\'') 
       .append(", id='").append(id).append('\'') 
       .append(", description='").append(description).append('\'') 
       .append('}') 
       .toString(); 
    } 

} 

出力:

  • のIntelliJ IDEAで生成Procedure.toString

[手順{NAME =」次のようにProcedureクラスである

private static final String LOOKS_LIKE_JSON = "[\n" + 
     " {procedure_name_txt=nameText, procedure_name_ets_id=ID-1234, procedure_ets_desc=description_123}, \n" + 
     " {procedure_name_txt=deafness, procedure_name_ets_id=ID-99022, procedure_ets_desc=description_31222}\n" + 
     "]"; 

// private static final Type procedureListType = TypeToken.getParameterized(List.class, Procedure.class).getType(); 
private static final Type procedureListType = new TypeToken<List<Procedure>>() { 
}.getType(); 

// private static final Type procedureArrayType = Procedure[].class; 
private static final Type procedureArrayType = new TypeToken<Procedure[]>() { 
}.getType(); 

private static final Type stringToStringMapListType = new TypeToken<List<Map<String, String>>>() { 
}.getType(); 

private static final Type stringToStringMapArrayType = new TypeToken<Map<String, String>[]>() { 
}.getType(); 

private static final Gson gson = new Gson(); 
private static final JsonParser jsonParser = new JsonParser(); 

public static void main(final String... args) { 
    final List<Procedure> procedureList = gson.fromJson(LOOKS_LIKE_JSON, procedureListType); 
    System.out.println(procedureList); 
    final Procedure[] procedureArray = gson.fromJson(LOOKS_LIKE_JSON, procedureArrayType); 
    System.out.println(Arrays.toString(procedureArray)); 
    final List<Map<String, String>> mapList = gson.fromJson(LOOKS_LIKE_JSON, stringToStringMapListType); 
    System.out.println(mapList); 
    final Map<String, String>[] mapArray = gson.fromJson(LOOKS_LIKE_JSON, stringToStringMapArrayType); 
    System.out.println(Arrays.toString(mapArray)); 
    final JsonElement jsonElement = jsonParser.parse(LOOKS_LIKE_JSON); 
    System.out.println(jsonElement); 
} 

名前eText」、ID = 'ID-1234'、説明= 'description_123'}、手順{NAME = '難聴'、ID = 'ID-99022'、説明= 'description_31222'}]

  • リスト

[{procedure_name_txt = nameText、procedure_name_ets_id = ID-1234、procedure_ets_desc = description_123}、{procedure_name_txt =難聴、procedure_name_ets_id:文字列エントリに文字列のマップ(実際、これは与えられた入力を反映する)、JDK toString()の= ID-99022、procedure_ets_desc = description_31222}]

  • Gson JSONツリーモデルtoString()

[{ "procedure_name_txt": "nameText"、 "procedure_name_ets_id": "ID-1234"、 "procedure_ets_desc": "description_123"}、{ "procedure_name_txt": "難聴"、 "procedure_name_ets_id": "ID-99022"、 "procedure_ets_desc": "description_31222"}]

関連する問題