将json对象解析为字符串
问题描述:
我有一个关于正在构建的Web应用程序的问题,我有一个REST服务接收json字符串。将json对象解析为字符串
JSON字符串是一样的东西:
{
"string" : "value",
"string" : "value",
"object" : {
"string" : "value",
"string" : "value",
....
}
}
我使用RestEasy的解析它使用杰克逊下面的JSON字符串。我有一个jaxb注释类,我想将“对象”完全解析为一个String变量。我想这样做的原因是能够稍后使用正确的解析器解析json(这取决于发送请求的应用程序,因此无法预先知道)。
我JAXB注解类看起来是这样的:
@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Test{
@XmlElement(type = String.class)
private String object;
//getter and setter
...
}
当我执行剩下的电话,让杰克逊解析这个代码,我得到一个
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
...
}
答
如果我理解这个问题,您只需要一个mechnanism,它将Java对象转换为JSON字符串,另一种方式。
我还需要这个,而我正在使用一个JSON字符串传递的WebSocket客户端 - 服务器通信。
为此我使用了GSON(请参阅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"
}
]
}
你的等级应该是这样的:
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 smart library。
然后,您可以简单地检索JSON对象首次使用:
JSONObject test = (JSONObject) JSONValue.parse(yourJSONObject);
String TestString = test.toString();
更重要的是,你可以检索JSON对象中的特定对象可能它是另一个对象,数组并将其转换为一个字符串或操纵你想要的方式。
它必须是一个字符串?由于您使用的是杰克逊,我建议将您的对象存储为[JsonNode](http://fasterxml.github.com/jackson-databind/javadoc/2.1.0/com/fasterxml/jackson/databind/JsonNode.html)。这应该反序列化就好,你可以用正确的解析器解析它。 – nutlike 2013-03-22 09:58:46
根据我的分析师,它应该是:)。无论如何,我会试试看,如果它有效,我会说服他。 – KwintenP 2013-03-22 10:29:09