2012-01-01 12 views
0

入れ子のJSONをJSONKitで解析しようとしていて、2番目のレベルのJSONが正しく解析されていません。ここでJSONKit Objective-Cで入れ子になったJSONを解析する

は...

私が間違っているつもりです
NSString *jsonString = "...long nested json string..."; 

NSDictionary *jsonParsed = [jsonString objectFromJSONString]; 

NSString *content = [[jsonParsed objectForKey:@"app"] objectForKey:@"content"]; 

NSDictionary *jsonContent = [content objectFromJSONString]; 

NSLog(@"%@", jsonContent); 

JSON ...

{ 
    "app": { 
     "content": "[{\\\"Id\\\":\\\"1\\\",\\\"Name\\\":\\\"John\\\"},{\\\"Id\\\":\\\"2\\\",\\\"Name\\\":\\\"John\\\"}]" 
    } 
} 

。ここでは、私のコードですサンプルですか?

答えて

0

これは非常に簡単です。\"をエスケープしています。したがって、NSString* contentの結果は\"になります。これはJSONパーサーがダイジェストできないものです。したがって、\\\"の代わりにこの\"を使用してください。

+0

JSONKitパーサーにこれらのスラッシュを尊重する方法がありますか? – Neutralizer

+0

私が言ったことは間違っていた。実際には、配列で始まる有効なJSONです。これがJSONKitがこれを正しく解析する理由です(私はそれを正常にテストしたばかりです)。 – Paul

0

次の持つコンテンツの文字列を交換する場合:

"[{\"Id\":\"1\",\"Name\":\"John\"},{\"Id\":\"2\",\"Name\":\"John\"}]" 

それは正しく解析されます。

JSON.parse("[{\"Id\":\"1\",\"Name\":\"John\"},{\"Id\":\"2\",\"Name\":\"John\"}]") 
>>> [Object { Id="1", Name="John"}, Object { Id="2", Name="John"}] 

コードのどこかでコンテンツ文字列を2回エスケープしていることがあります。


Firebugを使用してJSONが正しいかどうかを確認しました。 JSONKitは同じです:

clowwindy:~ clowwindy$ cat /tmp/input.txt 
{ 
    "app": { 
     "content": "[{\"Id\":\"1\",\"Name\":\"John\"},{\"Id\":\"2\",\"Name\":\"John\"}]" 
    } 
} 

NSError *error; 
NSString *input = [NSString stringWithContentsOfFile:@"/tmp/input.txt" encoding:NSUTF8StringEncoding error:&error]; 

NSString *jsonString = input; 

NSDictionary *jsonParsed = [jsonString objectFromJSONString]; 

NSString *content = [[jsonParsed objectForKey:@"app"] objectForKey:@"content"]; 

NSDictionary *jsonContent = [content objectFromJSONString]; 

NSLog(@"%@", jsonContent); 
NSLog(@"%@", content); 

2012-01-02 00:26:39.818 testjson[12700:707] (
     { 
     Id = 1; 
     Name = John; 
    }, 
     { 
     Id = 2; 
     Name = John; 
    } 
) 
2012-01-02 00:26:39.822 testjson[12700:707] [{"Id":"1","Name":"John"},{"Id":"2","Name":"John"}] 
+0

JavaScriptを使用していますか? – Neutralizer

+0

それは私が知っているものです。しかし、文字列には3つのスラッシュが含まれているので、私の選択肢は何ですか? – Neutralizer

+0

JSON文字列はどこから来たのですか?他の人が提供するAPIによって生成されるのでしょうか?それがあなた自身によって生成された場合、最良の方法は、それを正しく生成することです。 – clowwindy

関連する問題