Java 修改JSON对象的键
我面临着一个相当棘手的问题,在互联网上还找不到一个好的解决方案。我有一个Android应用程序,它可以拉下一个包含用户信息的大型JSON对象。格式如下:Java 修改JSON对象的键,java,android,json,Java,Android,Json,我面临着一个相当棘手的问题,在互联网上还找不到一个好的解决方案。我有一个Android应用程序,它可以拉下一个包含用户信息的大型JSON对象。格式如下: { "dateOfBirth": { "day": 25, "month": 3 }, "educations": { "_total": 1, "values": [{ "activities": "Music Society, Rugby college team", "d
{
"dateOfBirth": {
"day": 25,
"month": 3
},
"educations": {
"_total": 1,
"values": [{
"activities": "Music Society, Rugby college team",
"degree": "BA Computer Science",
"endDate": {"year": 2015},
"fieldOfStudy": "Computer Science",
"id": 298659638,
"notes": "The courses I enjoyed most are: Object-Oriented Programming, Data Structures and Algorithms, Compilers, Databases, Computer Networks and Computer Security.",
"schoolName": "University of Oxford",
"startDate": {"year": 2012}
}]
},
"firstName": "Roland",
"id": "-1QlZwe5fx",
"languages": {
"_total": 2,
"values": [
{
"id": 1,
"language": {"name": "English"}
},
{
"id": 2,
"language": {"name": "Romanian"}
}
]
},
"lastName": "Batovski",
"location": {"country": {"code": "gb"}}
...
}
我必须将此数据发送到的服务器具有它所期望的特定JSON格式,即它期望数据采用以下格式:
{
"userid": "Yohv74kuNm",
"profile": [],
"goalData": [
"Founders",
"Travel"
],
"event": "1",
"pin": "",
"_id": "c9lZlvo9SEcIwDBR",
"person": {
"id": {
"text": "Yohv74kuNm"
},
"languages": {
"total": "2",
"language": [
{
"id": {
"text": "57739336"
},
"language": {
"name": {
"text": "English"
}
}
}
]
},
"skills": {
"total": "15",
"skill": [
{
"id": {
"text": "11"
},
"skill": {
"name": {
"text": "Start-ups"
}
}
},
{
"id": {
"text": "13"
},
"skill": {
"name": {
"text": "Entrepreneurship"
}
}
},
... }
显然,这些对象是完全不同的,但本质上它们持有相同的数据。我正在寻找一种方法来轻松地将一个映射到另一个。i、 e从我接收到的数据中获取数据,并创建一个我填写的新JSON对象。请记住,这些对象相当大,并且有很多嵌套值。我尝试过使用JavaEE的JsonObjectBuilder,但是创建一个这样大小的对象似乎需要大量的手工工作,我在下面做了一个快速的尝试
JsonObject jsonString = factory.createObjectBuilder()
// add the fields here
.add("id", factory.createObjectBuilder()
.add("text", this.jsonObject.get("id").getAsString())
.build())
.add("languages", factory.createObjectBuilder()
.add("total", this.jsonObject.get("languages").getAsJsonObject().get("_total").getAsString())
.build())
.build()
谢谢你的帮助 我会做什么:
用于序列化/反序列化JSON/POJO。
JSON结构1有一个类结构。
为JSON结构2提供另一个类结构。
为了清晰起见,将它们放在不同的包装中。
用于自动创建类结构。
编写一个转换器,将反序列化的java对象从json 1转换为与json 2兼容的java对象。
另一种可能是让java对象反映两个json结构中的一个,并使用一个来处理另一个json结构 这就是我想做的。我面临的问题是写你所说的转换器。考虑到JSON对象的复杂结构,这不是很复杂吗?@RolandBatovski是的,这可能会变得非常复杂,这取决于两种JSON格式在结构上的差异。但至少您将使用类型安全的java对象,而不是自己构建json字符串,这将更加繁琐和容易出错。不过,其他人可能会有更好的建议。我明白:非常感谢!我会调查的