Java 修改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

我面临着一个相当棘手的问题,在互联网上还找不到一个好的解决方案。我有一个Android应用程序,它可以拉下一个包含用户信息的大型JSON对象。格式如下:

{
  "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字符串,这将更加繁琐和容易出错。不过,其他人可能会有更好的建议。我明白:非常感谢!我会调查的