2016-11-09 20 views
0

Gsonを使用してJson文字列を作成しました.Jsonオブジェクトを作成するには次の方法を使用しました。Json文字列をオブジェクトにキャストするときのGson malformedJsonException

Map myMap=new HashMap(); 
myMap.put("dryRunTest",dryRunTestObj); 
myMap.put("port",22); 
myMap.put("Repository",RepositoryObj); 
etc... 

Map temp = new HashMap(); 
temp.put("configuration",myMap); 
new GsonBuilder().setPrettyPrinting().create().toJson(temp); 
//This gave me the below Json Object that would write to a file. 

{ 
    "configuration": { 
    "dryRunTest": { 
     "id": null, 
     "defaultName": "sample.xml", 
     "ParamsMap": null, 
     "defaultVersion": "1.2", 
     "dryRunTestOn": true 
    }, 
    "port": 2323, 
    "ip": "11.11.11.111", 
    "configFile": "config.json", 
    "Name": "007", 
    "URL": "http://11.111.111.51/ma/api/ag/", 
    "Password": "123", 
    "configDirectory": "sss", 
    "platform": "Windows7", 
    "Repository": { 
     "repositoryURL": "http://11.11.111.11/" 
    } 
    } 
} 

私は、次のようにリポジトリJSON文字列を使用してRepositoryオブジェクトを作成しようとしました。

class Repository{ 
String repositoryURL; 
getter and setters 
} 

その後、私はそれが例外を以下返し、

Map mymap= new Gson().fromJson(JsonObjectReadFromFile(aboveString), HashMap.class); 

RepositoryJsonStringvalue = mymap.get("Repository"); 

Repository r=new Gson().fromJson(RepositoryJsonStringvalue, Repository.class); 

を使用してJSONオブジェクトをシリアル化desalinize。

com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 21 

問題がrepositoryURLに価値をそれとあったが、私は別のトップレベルの属性URL=http://11.11.111.11/に同じ値を入れた後、値を取得することができますが、それは入力オブジェクト内に置くとき、それはerror.Pleaseは私が解決する方法を知っていることを投げるように思えますこの。

:私は、私は私がしてもJSONオブジェクトにURL http://11.11.111.11/を置くことができる方法を知っていただきたいと思いobject.So私はリポジトリにキャストすることができ、文字列から特殊文字: \を削除する場合、問題がrepositoryURL属性にあった見つけた私上記のオブジェクトは有効なJsonです。次のように

答えて

1

POJOクラスは次のようになります - 私は、以下のPOJOクラス内のすべてのフィールドを含めていない

。あなたは含めて試すことができます。

ParentConfigurationクラス: -

public class ParentConfiguration implements Serializable{ 


    private static final long serialVersionUID = -1185592608319193198L; 

    private Configuration configuration; 

    @Override 
    public String toString() { 
     return "ParentConfiguration [configuration=" + configuration + "]"; 
    } 


} 

Configurationクラス: -

public class Configuration implements Serializable { 

    @Override 
    public String toString() { 
     return "Configuration [port=" + port + ", URL=" + URL + ", repository=" + repository + "]"; 
    } 

    private static final long serialVersionUID = 8642243843212797330L; 

    private Integer port; 

    private String URL; 



    @SerializedName("Repository") 
    private Repository repository; 

} 

リポジトリクラス: -

public class Repository implements Serializable{ 

    @Override 
    public String toString() { 
     return "Repository [repositoryURL=" + repositoryURL + "]"; 
    } 
    private static final long serialVersionUID = -1891563116357617243L; 
    private String repositoryURL; 

} 

主な方法: -

public static void main(String[] args) { 
     String jsonString = "{ \"configuration\": {\"dryRunTest\": {\"id\": null,\"defaultName\": \"sample.xml\",  \"ParamsMap\": null,  \"defaultVersion\": \"1.2\",  \"dryRunTestOn\": true }, \"port\": 2323, \"ip\": \"11.11.11.111\", \"configFile\": \"config.json\", \"Name\": \"007\", \"URL\": \"http://11.111.111.51/ma/api/ag/\", \"Password\": \"123\", \"configDirectory\": \"sss\", \"platform\": \"Windows7\", \"Repository\": {  \"repositoryURL\": \"http://11.11.111.11/\" } }}"; 


     Gson gson = new Gson(); 
     ParentConfiguration parentConfiguration = gson.fromJson(jsonString, ParentConfiguration.class); 
     System.out.println(parentConfiguration.toString()); 
    } 

出力: - :

-

ParentConfiguration [configuration=Configuration [port=2323, URL=http://11.111.111.51/ma/api/ag/, repository=Repository [repositoryURL=http://11.11.111.11/]]] 

の代わりにあなたはJsonObjectとしてそれを解析することができた場合、地図に変換するには、簡単に結果を得ることができます

import org.apache.commons.io.IOUtils; JsonObject jsonObject= new Gson().fromJson(IOUtils.toString(ParseUrl.class.getResourceAsStream("/configuration.json")), JsonObject.class); Repository respository = gson.fromJson(jsonObject.getAsJsonObject("configuration").get("Repository"), Repository.class); System.out.println(respository); 
+0

おかげでポストを更新しましたホープ 'Repository'が問題のようobject.seemsにキャストしたいが'それはいくつかの終端されていない値が含まれrepositoryURL'ました。 – gihan

+0

リポジトリオブジェクトを解析して取得する別の方法が追加されました。 – notionquest

+0

私のtime.itを保存していただきありがとうございます。ちょっとした説明があります.Jsonのシリアル化とデシリアライゼーションのために 'toString'をオーバーライドすることと関係がありますか?field.canで' @ SerializedName'を入れても問題ありません。 。 – gihan

0

文字列をjson strinに変換できますgsonを使ってオブジェクトに変換する前に これは、map.get(key)を実行するとオブジェクトを取得するマップの場合に発生します。

オブジェクトにはキーまたは値の前後に引用符がありません。

前にjsonに変換している間、そのことを確認します。

RepositoryJsonStringvalue = mymap.get("Repository"); 
String jsonString = new Gson().toJson(RepositoryJsonStringvalue).toString(); 
Repository r=new Gson().fromJson(jsonString, Repository.class); 

は、より詳細にはrefer.Iを喜ばせると自分のreply.Iため

関連する問題