小编Shi*_*nyx的帖子

杰克逊序列化:忽略空值(或null)

我目前正在使用jackson 2.1.4,当我将对象转换为JSON字符串时,我在忽略字段时遇到了一些麻烦.

这是我的类,它充当要转换的对象:

public class JsonOperation {

public static class Request {
    @JsonInclude(Include.NON_EMPTY)
    String requestType;
    Data data = new Data();

    public static class Data {
        @JsonInclude(Include.NON_EMPTY)
        String username;
        String email;
        String password;
        String birthday;
        String coinsPackage;
        String coins;
        String transactionId;
        boolean isLoggedIn;
    }
}

public static class Response {
    @JsonInclude(Include.NON_EMPTY)
    String requestType = null;
    Data data = new Data();

    public static class Data {
        @JsonInclude(Include.NON_EMPTY)
        enum ErrorCode { ERROR_INVALID_LOGIN, ERROR_USERNAME_ALREADY_TAKEN, ERROR_EMAIL_ALREADY_TAKEN };
        enum Status { ok, error };

        Status status; …
Run Code Online (Sandbox Code Playgroud)

java json jackson

131
推荐指数
6
解决办法
27万
查看次数

Json在objective-c中解析nil字段

我将JSON映射到基础对象时遇到问题...

当JSON字符串不包含该键时,有没有办法将"nil"值放到类成员变量上?

例如,这是我的DataModel类:

@interface DataModel : JSONModel

@property (strong, nonatomic) NSString* Status;
@property (strong, nonatomic) NSString* ErrorCode;

@property (strong, nonatomic) ClientModel* Client;

@end
Run Code Online (Sandbox Code Playgroud)

该类用于解析ClientModel对象中有关客户端的一些信息,并具有ErrorCode和Status字段.

状态字段可以包含"确定"或"错误".这里没问题.如果json包含"Error"作为状态,则下一个字段是ErrorCode.

问题是服务器不会总是向我发送ErrorCode的键值(当状态为"Ok"时,服务器API不发送ErrorCode键值).

考虑到我无法修改服务器发送的JSON,如何解析我的模态对象中收到的JSON字符串,并在JSON字符串不包含时将"nil"作为ErrorCode值?

有没有允许我们这样做的图书馆?我目前正在使用JSONModel,但是当缺少密钥时,它给出了"传入数据无效"错误.我知道用于java的Jackson API处理这种情况,但我不知道在Objective-C中是否有类似的东西.如果我可以使用NSJSONSerialization进行解决方法,我也很高兴听到它.

谢谢!

iphone json objective-c ios nsjsonserialization

3
推荐指数
1
解决办法
1883
查看次数

为什么在c ++中重载运算符时不需要范围解析(::)?

通常,当您在类声明中声明方法并在外部定义它时,您需要指定其范围.

由于我已经读过运算符是非常常规的方法,我发现很难理解以下行为:

class A
{
public:
    A(int x)
    { this->x = x;}
    int foo();
    friend const A operator+ (const A& left,const int right);

private:
    int x;
};

const A operator+ (const A& left,const int right) //can't be A::operator+
{
    return A(left.x + right);
}

int A::foo()  // A:: is needed here
{
    return 5;
}

int main(int argc, char **argv) {
    A a(1);
    a = a + 4;
    a.operator =(a+5);
    a.foo();
}
Run Code Online (Sandbox Code Playgroud)

为什么我们不需要指定我们定义\ overloading的"operator +"?是从操作数推断出来的吗?

c++ operator-overloading

3
推荐指数
1
解决办法
1622
查看次数