将json对象解析为字符串

时间:2013-03-22 08:31:32

标签: java json jaxb jackson resteasy

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

Json字符串类似于:

{
    "string" : "value",
    "string" : "value", 
    "object" : {
                 "string" : "value",
                 "string" : "value",
                 ....
                }
}

我正在使用resteasy来解析使用下面的jackson的json字符串。我有一个jaxb注释类,我想将“对象”完全解析为String变量。我想这样做的原因是以后能够使用正确的解析器解析json(它取决于发送请求的应用程序,因此事先无法知道)。

我的jaxb注释类看起来像这样:

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

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

//getter and setter
...
}

当我执行其余的调用并让jackson解析这段代码时,我得到了一个

Can not deserialize instance of java.lang.String out of START_OBJECT token

错误。所以实际上我正在尝试将一个json字符串(一个json对象)解析成一个String。我似乎找不到有类似问题的人。

提前感谢您的回复。

4 个答案:

答案 0 :(得分:1)

如果我理解这个问题,你只需要一个mechnanism,将Java-Object转换为JSON-String,反之亦然。

我也需要这个,而我正在使用WebSocket客户端 - 服务器通信,其中传递了JSON字符串。

为此,我使用了GSON(见GSON)。在那里,您可以创建完整的JSON-String。 这里有一些例子:

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

您需要的是,您的Class-Attributes-setter和JSON-Attribute-names是等效的。 E.g。

{
   "info":[
      {
         "name": "Adam",
         "address": "Park Street"
      }
    ]
}

你的班级应该是这样的:

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

答案 1 :(得分:1)

@KwintenP尝试使用json smart library

然后,您可以使用以下命令简单地检索JSON对象:

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

此外,您可以检索JSON对象中的特定对象,可能是另一个对象,数组并将其转换为String或操纵您想要的方式。

答案 2 :(得分:0)

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
...
}

答案 3 :(得分:0)

你也可以这样做;

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
     }

}