小编Cas*_*all的帖子

杰克逊:忽略属性,而不是抛出JsonMappingException

我有一个需要使用Jackson从JSON反序列化的类。类结构如下所示:

public class A {
    public B b;
}

public class B {
    public List<C> c;
}

public class C {
    public String s;
    public Long l1;
    public Long l2;
    public Long l3;
}
Run Code Online (Sandbox Code Playgroud)

反序列化对象通常效果很好;除了,它与错误代码互操作,当列表为空时,错误代码发出错误的值。也就是说,与其发出:

{ "b" : { "c" : [] } }
Run Code Online (Sandbox Code Playgroud)

它发出:

{ "b" : { "c" : {} } }
Run Code Online (Sandbox Code Playgroud)

杰克逊遇到以下情况时会抛出此异常:

org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
 at [Source: [B@1ad5cabc; line: 1, column: 896] (through reference chain: A["b"]->B["c"])
Run Code Online (Sandbox Code Playgroud)

当然,所有这些都是有道理的。输入错误。 …

java json jackson

5
推荐指数
1
解决办法
4243
查看次数

我应该在返回NSString的方法中返回NSMutableString

好的,所以我有一个方法,它接受一个NSString输入,对这个字符串的内容进行操作,并返回处理过的字符串.所以宣言是:

- (NSString *) processString: (NSString *) str;
Run Code Online (Sandbox Code Playgroud)

问题是:我应该只返回NSMutableString我用作"工作"缓冲区的实例,还是应该NSString在可变项周围创建一个新实例,并返回?

我应该这样做:

- (NSString *) processString: (NSString *) str
{
    NSMutableString *work = [NSMutableString stringWithString: str];
    // process 'work'
    return work;
}
Run Code Online (Sandbox Code Playgroud)

或这个:

- (NSString *) processString: (NSString *) str
{
    NSMutableString *work = [NSMutableString stringWithString: str];
    // process 'work'
    return [NSString stringWithString: work]; // or [work stringValue]?
}
Run Code Online (Sandbox Code Playgroud)

第二个是我要返回的字符串的另一个副本,除非NSString像copy-on-modify这样的智能事物.但第一个是返回调用者可以理所当然地稍后进行修改的东西.我不在乎他们是否这样做,因为弦是他们的.但是,是否有正当理由选择后一种形式而不是前者呢?而且,要么stringWithStringstringValue在其他首选?

objective-c

4
推荐指数
1
解决办法
616
查看次数

标签 统计

jackson ×1

java ×1

json ×1

objective-c ×1