将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 }
}
- 泽西岛:如何将jackson添加到Servlet Holder
- 在JSON对象中强制执行非空字段
- Maven – 无法下载fastxml.jackson
- Jackson2 PropertyFilter用于嵌套属性,还是有另一种方法?
- 直接自引用导致循环exception
- jackson序列化:如何忽略超类属性
- RestEasy:org.codehaus.jackson.map.JsonMappingException:无法从START_OBJECT标记(..)中反序列化java.util.ArrayList的实例
- 使用Jersey / JAXB / Jackson的Java.util.Map到JSON对象
- 重命名Spring中MappingJacksonJsonView使用的JSON字段