将json对象解析为字符串

我有一个关于我正在构建的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。 我似乎找不到有类似问题的人。

提前感谢您的回复。

如果我理解这个问题,你只需要一个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是等价的。 例如

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

你的class级应该是这样的:

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

@KwintenP尝试使用json智能库 。

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

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

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

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

你也可以这样做;

 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 } 

}