Java 将json对象解析为字符串

Java 将json对象解析为字符串,java,json,jaxb,jackson,resteasy,Java,Json,Jaxb,Jackson,Resteasy,我有一个关于我正在构建的web应用程序的问题,其中我有一个REST服务接收json字符串 Json字符串类似于: { "string" : "value", "string" : "value", "object" : { "string" : "value", "string" : "value", .... } } 我使用reste

我有一个关于我正在构建的web应用程序的问题,其中我有一个REST服务接收json字符串

Json字符串类似于:

{
    "string" : "value",
    "string" : "value", 
    "object" : {
                 "string" : "value",
                 "string" : "value",
                 ....
                }
}
我使用resteasy解析json字符串,该字符串下面使用jackson。我有一个jaxb注释类,我想将“object”完全解析为一个字符串变量。我之所以要这样做,是为了能够在以后使用正确的解析器解析json(这取决于发送请求的应用程序,因此不可能提前知道)

我的jaxb注释类如下所示:

@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Test{

@XmlElement(type = String.class)
private String object;

//getter and setter
...
}
public class Info{
 private String name;
 private String address;

 public void setName(String name){
  this.name = name;
 }
 public void setAddress(String address){
  this.address = address;
 }
}
当我执行rest调用并让jackson解析代码时,我得到一个

Can not deserialize instance of java.lang.String out of START_OBJECT token
错误。所以实际上我正试图将一段json字符串,也就是json对象,解析成一个字符串。我似乎找不到有类似问题的人

提前感谢您的回复

java.lang.String out of START_OBJECT token
这意味着
“object”
后面的字符应该是引号
,而不是括号
{

预期的json

"object" : "my object"
实际json

"object" : { ...  
=======
如果你想像你的例子中那样解析json,那么改变你的类

@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Test{

   @XmlElement
   private InnerTest object;

   //getter and setter
...
}  

@XmlAccessorType(XmlAccessType.PROPERTY)
public class InnerTest{

   @XmlElement
   private String string;

   //getter and setter
...
}

如果我理解这个问题,您只需要一个机制,它将Java对象转换为JSON字符串,反之亦然

我在使用WebSocket客户机-服务器通信时也需要它,其中传递了JSON字符串

为此,我使用了GSON(请参阅),您可以创建一个完整的JSON字符串。 这里有一些例子:

// Converts a object into a JSON-String
public String convertMyClassObjectToJsonFormat() {
  MyClass myObject = new MyClass();
  Gson gson = new Gson();

  return gson.toJson(myObject);
}

//Converts a JSON-String into a Java-Class-Object
public MyClass convertJsonToMyClassObject(
            CharBuffer jsonMessage) {
  Gson gson = new Gson();

  return gson.fromJson(jsonMessage.toString(),
                MyClass.class);
}
您需要的是,您的类属性设置器和JSON属性名称是等效的

{
   "info":[
      {
         "name": "Adam",
         "address": "Park Street"
      }
    ]
}
您的类应该如下所示:

@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Test{

@XmlElement(type = String.class)
private String object;

//getter and setter
...
}
public class Info{
 private String name;
 private String address;

 public void setName(String name){
  this.name = name;
 }
 public void setAddress(String address){
  this.address = address;
 }
}

你也可以这样做

public class LeaderboardView
{
     @NotEmpty
     @JsonProperty
     private String appId;

     @NotEmpty
     @JsonProperty
     private String userId;

     @JsonProperty
     private String name = "";

     @JsonProperty
     private String imagePath = "";

     @NotEmpty
     @JsonIgnore
     private String rank = "";

     @NotEmpty
     @JsonProperty
     private String score;

     public LeaderboardView()
     {
        // Jackson deserialization
     }
}@KwintenP尝试使用

然后,您只需首先使用以下命令检索JSON对象:

JSONObject test = (JSONObject) JSONValue.parse(yourJSONObject);
String TestString = test.toString();

此外,您还可以检索JSON对象中的特定对象,可以是另一个对象、数组,并将其转换为字符串或按您所需的方式进行操作。

它必须是字符串吗?因为您使用的是Jackson,我建议将您的对象存储为。这应该可以反序列化,之后您可以使用正确的语法分析器。根据我的分析师的说法,应该是:)。不管怎样,我都会尝试,如果成功的话,我会说服他。