java - 在 JAXB 中将 JSON 对象转换为字符串

标签 java json web-services

正在编写一个 Web 服务端点,它将生成 JSON 和 XML 响应。这里我想将一个对象转换为 JSON 并将其设置为字符串。当我尝试使用下面的代码时

网络服务端点

package com.test1;

import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

            import org.json.JSONArray;
            import org.json.JSONException;
            import org.json.JSONObject;`


            @Path("v1")
            public class Impl1 {
                   @POST
                   @Path("method")
                   @Produces({"text/xml","application/json"})
                   public XML method() throws JSONException
                   {
                          //JSONObject obj = new JSONObject();
                          JSONArray ary = new JSONArray();
                          Main main = new Main();`

                          List<Student> details = new ArrayList<Student>() ;
                          Student s1 = new Student();
                          Student s2 = new Student();
                          Student s3 = new Student();
                          s1.setId("ID1");
                          s1.setValue("1");
                          s2.setId("ID2");
                          s2.setValue("2");
                          s3.setId("ID3");
                          s3.setValue("3");                          
                         details.add(s1);
                         details.add(s2);
                         details.add(s3);

                         main.setDetails(details);
                         ary.put(details);

                   Employee emp = new Employee();
                   emp.setName("Mike");
                   emp.setSalary(1000);

                   XML xml = new XML();

                   xml.setDetails(ary.toString());
                   xml.setEmp(emp);
                   xml.setId("1"); 

                   return xml;
                   } 
                }


XML class (JAXB)

                package com.test1;

                import java.util.HashMap;
                import java.util.Map;
                import javax.xml.bind.annotation.XmlElement;
                import javax.xml.bind.annotation.XmlRootElement;

                @XmlRootElement
                public class XML {  

                String id;
                Employee emp;
                String details;

                public String getId() {
                   return id;
                }

                 public void setId(String id) {
                   this.id = id;
                 }

                 public Employee getEmp() {
                    return emp;
                }

                public void setEmp(Employee emp) {
                   this.emp = emp;
                }

                public String getDetails() {
                    return details;
                }

                public void setDetails(String details) {
                    this.details = details;
                }
                }

Student Class 
                package com.test1;

                public class Student {

                   String id;
                   String Value;
                   public String getId() {
                          return id;
                   }
                   public void setId(String id) {
                          this.id = id;
                   }
                   public String getValue() {
                          return Value;
                   }
                   public void setValue(String value) {
                          Value = value;

Main Class
                 package com.test1;

                import java.util.List;

                public class Main {



                   List<Student> details;

                   public List<Student> getDetails() {
                          return details;
                   }

                   public void setDetails(List<Student> details) {
                          this.details = details;
                   }


                }

所以当我点击我的服务时得到的响应为

            {
              "details" : "[[{\"id\":\"ID1\",\"value\":\"1\"},{\"id\":\"ID2\",\"value\":\"2\"},{\"id\":\"ID3\",\"value\":\"3\"}]]",
              "emp" : {
                "name" : "Arun",
                "salary" : "1000.0"
              },
              "id" : "1"
            }

预期字符串值为

    [{"id":"ID1","value":"1"},{"id":"ID2","value":"2"},{"id":"ID3","value":"3"}]

我的问题是为什么转换为字符串的 JSONArray 在每个键值对上都包含“\”。有什么办法可以克服这个问题吗?

最佳答案

使用 Jackson 或 google-gson 或任何其他库。 例如 http://howtodoinjava.com/2014/06/16/jackson-examples-convert-java-object-to-from-json/

关于java - 在 JAXB 中将 JSON 对象转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27739823/

相关文章:

java - `putForNullKey`方法在hashmap的 `put`方法内部做了什么?

java - Gradle-bootstrap类路径未与-source 1.7一起设置

javascript - 数组和JSON之间是否存在混合数据结构?

asp.net - 如何在 ASP.Net Web 窗体应用程序中从 Jquery 安全地调用用于内部目的的 Web 服务 (.asmx)?

java - 基于 SOAP 的 Web 服务中的身份验证和角色 (Java)

java - 使用 Intellij 配置 JPA

json - 从 SQL 查询生成完整日历的 json 事件

java - 如何使用OpenFeign获取pojo数组?

android - 当我尝试调用 Web 服务连接方法时应用程序崩溃

java - 如何在JAVA中将多个数组合并成一个矩阵?