我希望能够在Java操作方法中访问JSON字符串中的属性.只需说出字符串即可myJsonString = object.getJson().下面是字符串的示例:
{
'title': 'ComputingandInformationsystems',
'id': 1,
'children': 'true',
'groups': [{
'title': 'LeveloneCIS',
'id': 2,
'children': 'true',
'groups': [{
'title': 'IntroToComputingandInternet',
'id': 3,
'children': 'false',
'groups': []
}]
}]
}
Run Code Online (Sandbox Code Playgroud)
在此字符串中,每个JSON对象都包含其他JSON对象的数组.目的是提取ID列表,其中任何给定对象拥有包含其他JSON对象的组属性.我把Google的Gson视为潜在的JSON插件.任何人都可以提供某种形式的指导,告诉我如何从这个JSON字符串生成Java?
尝试使用Jackson序列化一个非常简单的对象时,我得到了一个例外.错误:
org.codehaus.jackson.map.JsonMappingException:没有为类MyPackage.TestA找到序列化程序,也没有发现创建BeanSerializer的属性(为了避免异常,请禁用SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS))
下面是序列化的简单类和代码.
任何人都可以告诉我为什么会收到此错误?
public class TestA {
String SomeString = "asd";
}
TestA testA = new TestA();
ObjectMapper om = new ObjectMapper();
try {
String testAString = om.writeValueAsString(testA); // error here!
TestA newTestA = om.readValue(testAString, TestA.class);
} catch (JsonGenerationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JsonMappingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud) 它应该是如此简单,但我在尝试一小时#embarrasing后找不到它.
我需要获取一个JSON字符串,例如{"k1":v1,"k2":v2},解析为JsonNode.
JsonFactory factory = new JsonFactory();
JsonParser jp = factory.createJsonParser("{\"k1\":\"v1\"}");
JsonNode actualObj = jp.readValueAsTree();
Run Code Online (Sandbox Code Playgroud)
给
java.lang.IllegalStateException: No ObjectCodec defined for the parser, can not deserialize JSON into JsonNode tree
我正在使用JAVA 1.6和Jackson 1.9.9我有一个枚举
public enum Event {
FORGOT_PASSWORD("forgot password");
private final String value;
private Event(final String description) {
this.value = description;
}
@JsonValue
final String value() {
return this.value;
}
}
Run Code Online (Sandbox Code Playgroud)
我添加了一个@JsonValue,这似乎完成了将对象序列化为:
{"event":"forgot password"}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试反序列化时,我得到了一个
Caused by: org.codehaus.jackson.map.JsonMappingException: Can not construct instance of com.globalrelay.gas.appsjson.authportal.Event from String value 'forgot password': value not one of declared Enum instance names
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
如何将Jackson JSON映射器与Java 8 LocalDateTime一起使用?
org.codehaus.jackson.map.JsonMappingException:无法从JSON String实例化类型[simple type,class java.time.LocalDateTime]的值; 没有单字符串构造函数/工厂方法(通过引用链:MyDTO ["field1"] - > SubDTO ["date"])
默认的jackon行为似乎使用两个属性(getter和setter)和字段来序列化和反序列化为json.
我想使用这些字段作为序列化配置的规范来源,因此不希望jackson完全查看属性.
我可以使用注释在单个类的基础上执行此操作:
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
Run Code Online (Sandbox Code Playgroud)
但我不想把它放在每一堂课......
是否可以在全球范围内进行配置?喜欢在Object Mapper中加一些?
我正在尝试做这样的事情,但它不起作用:
Map<String, String> propertyMap = new HashMap<String, String>();
propertyMap = JacksonUtils.fromJSON(properties, Map.class);
Run Code Online (Sandbox Code Playgroud)
但IDE说:
未选中的作业
Map to Map<String,String>
这样做的正确方法是什么?我只使用Jackson,因为这是项目中已有的,是否有一种原生Java方式转换为JSON /从JSON转换?
在PHP中,我会简单地json_decode($str)回到一个数组.我在这里需要基本相同的东西.
我正在使用杰克逊将我的一个物体转换为json.该对象有2个字段:
@Entity
public class City {
@id
Long id;
String name;
public String getName() { return name; }
public void setName(String name){ this.name = name; }
public Long getId() { return id; }
public void setName(Long id){ this.id = id; }
}
Run Code Online (Sandbox Code Playgroud)
由于我想在jQuery自动完成功能中使用它,我希望'id'在json中显示为'value','name'显示为'label'.杰克逊的文档不明确这一点,我已经想尽注释,甚至远程好像它做什么,我需要,但我不能让name显示为label,并id显示为value在JSON.
有谁知道如何做到这一点,或者这是否可能?
我有一个带密码字段的实体类:
class User {
private String password;
//setter, getter..
}
Run Code Online (Sandbox Code Playgroud)
我希望在序列化期间跳过此字段.但它应该仍然能够反序列化.这是必需的,以便客户端可以向我发送新密码,但无法读取当前密码.
我如何与杰克逊完成这项任务?
这豆'州':
public class State {
private boolean isSet;
@JsonProperty("isSet")
public boolean isSet() {
return isSet;
}
@JsonProperty("isSet")
public void setSet(boolean isSet) {
this.isSet = isSet;
}
}
Run Code Online (Sandbox Code Playgroud)
使用ajax'success'回调通过线路发送:
success : function(response) {
if(response.State.isSet){
alert('success called successfully)
}
Run Code Online (Sandbox Code Playgroud)
这里需要注释@JsonProperty吗?使用它有什么好处?我想我可以删除这个注释而不会产生任何副作用.
在https://github.com/FasterXML/jackson-annotations/wiki/Jackson-Annotations上阅读这个注释我不知道什么时候需要使用它?