2

こんにちは、obj-c の初心者です。

json で奇妙な結果が得られました。NSThread によって呼び出される json 関数があります。最初に json 関数を実行すると結果が表示されますが、関数が 2 回目に呼び出されると null が返されます。

ここに私のjson関数があります:

- (void) updatePaxWithBook:(Book*)_book{

NSString* bookCode = _book.bookCode;

NSString* url = [NSString stringWithFormat:@"%@/?book_code=%@", URL_UPDATE_PAX,bookCode];
url = [url stringByReplacingOccurrencesOfString:@" " withString:@"%20"];

JSONDecoder* jDecoder = [[JSONDecoder alloc] init];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
jObject = [jDecoder objectWithData:response];

NSString* errCode =@"";
if ([[jObject objectForKey:@"err_code"] isKindOfClass:[NSNumber class]]) {
    errCode = [[jObject objectForKey:@"err_code"] stringValue];
} else {
    errCode = [jObject objectForKey:@"err_code"];
}

NSLog(@"OUT >> %@",jObject);
NSLog(@"OUT >> %@",errCode);
}

したがって、最初の json を実行すると、次のような応答が返されます。

{ "err_code": 0, "book_code": "1XX1AS", "pax_num": [1,0,0], "pax_name": ["USER NAME"] }

いくつかの結果を示す NSLog:

OUT >> {
"book_code" = 1XX1AS;
"err_code" = 0;
"pax_name" =     (
    USER NAME
);
"pax_num" =     (
    1,
    0,
    0
);}
OUT >> 0

しかし、関数が 2 回呼び出されたときの応答は次のとおりです。

{ "err_code": 001002, "err_msg": "Validation error: there are no changes on original data." }

およびいくつかのヌルを示す NSLog

OUT >> (null)
OUT >> (null)

コードの何が問題になっていますか? どうすればよいですか?

4

1 に答える 1

2

http://jsonlint.comから2 番目の JSON を実行すると、2 番目の例の数値の先頭にゼロが含まれていないことがわかります。

2番目の例を実行してこれを確認しNSJSONSerializationました(オブジェクトが得られNSErrorます):

NSError *error = nil;
jObject = [NSJSONSerialization JSONObjectWithData:response options:0 error:&error];

if (error)
    NSLog(@"JSON error: %@", error);
else
    NSLog(@"JSON result: %@", jObject);

結果のNSErrorオブジェクトには、次のエラー メッセージが含まれていました。

15 文字の前後に先行ゼロを付けた数値。

その JSON をどのように生成しましたか? 独自の JSON 文字列を作成しましたか、それとも標準の JSON 関数呼び出しを使用していますか?

その数値エラー コードは、先頭にゼロを付けないか、引用符で囲む必要があります。JSON エラー応答を生成しているものは何でも、JSON を適切にエンコードしていません。

于 2013-05-15T16:06:27.050 に答える