gpt4 book ai didi

java - 将 Json 字符串转换为对象时出现 Gson malformedJsonException

转载 作者:行者123 更新时间:2023-12-01 09:16:38 32 4
gpt4 key购买 nike

我使用 Gson 创建了一个 Json 字符串,这是有效的。我使用以下方式创建 Json 对象。

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/"
}
}
}

我尝试使用 Repository Json 字符串创建 Repository 对象,如下所示。

class Repository{
String repositoryURL;
getter and setters
}

然后我使用淡化序列化 Json 对象,

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

RepositoryJsonStringvalue = mymap.get("Repository");

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

它返回以下异常。

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

似乎问题在于它的值repositoryURL,但我将相同的值放入另一个顶级属性URL=http://11.11.111.11/,然后可以获取值但是当它放入对象类型时,它会抛出该错误。请让我知道如何解决这个问题。

注意:如果我从可以转换为 Repository 对象的字符串中删除特殊字符 :\,我发现问题出在 repositoryURL 属性中所以我想知道如何将 URLhttp://11.11.111.11/ 放入 json 对象中,即使我的上述对象是有效的 Json。

最佳答案

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 + "]";
}


}

配置类:-

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,则无需转换为 Map,您可以轻松实现结果:-

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);

关于java - 将 Json 字符串转换为对象时出现 Gson malformedJsonException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40506136/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com