我知道很多问题已经解决了这个问题,但我找不到一个帮助我的问题......
当我解析从localhost(MAMP服务器)下载的json数据时,我面对json错误3840,指出字符0周围的无效值...
我不明白为什么,因为我的数组上的var_dump的php脚本显示(数组数组):
array(2) { [0]=> array(5) { ["ID"]=> string(1) "1" ["EDS"]=> string(4) "1000" ["lastname"]=> string(8) "My lastname" ["firstname"]=> string(9) "My firstname" ["dateOfBirth"]=> string(10) "19.12.1975" } [1]=> array(5) { ["ID"]=> string(1) "2" ["EDS"]=> string(4) "1001" ["lastname"]=> string(14) "Smith" ["firstname"]=> string(6) "John" ["dateOfBirth"]=> string(10) "11.11.1111" } }
...对我来说似乎是一个有效的json数组。
当我记录下载的NSMutableData时,它不是null,而是类似
76353648 2734b0a9 (+ around fifty like this).
我不知道是不是因为数据不完整,但我不知道如何继续分析出现的问题。
如果有人知道会发生什么(我知道这与未被识别的特殊字符有关),那就太棒了。
非常感谢!
编辑:在原始问题中添加了后续代码:
在
(void)connectionDidFinishLoading:(NSURLConnection *)connection {
id jsonObject = [NSJSONSerialization JSONObjectWithData:_downloadedData options:NSJSONReadingAllowFragments error:&error];
if ([jsonObject isKindOfClass:[NSArray class]]) {
NSArray *deserializedArray = (NSArray *)jsonObject;
for (NSDictionary *jsonElement in deserializedArray)
{
Person *newPersonElement = [[PersonStore sharedStore] createPerson]; // --> what makes the app crash. But this method is working everywhere else...
// more code omitted
}
我不知道为什么这个初始化会在这里崩溃......
答案 0 :(得分:1)
更新回答:
我认为你已经发布了使用这个收到的JSON的Objective-C代码,但是很清楚实际问题是什么。
听起来您使用核心数据(PersonStore
)来保留传入的数据。
如果您正在从调用connectionDidFinishLoading:
的同一线程进行Core Data调用,那么您很可能会遇到一个线程问题,其中Core Data不满意您从其他线程调用它主线。
尝试一下:在connectionDidFinishLoading:
中填写以下代码:
dispatch_async(dispatch_get_main_queue(), ^{
// Include the code here that walks over the incoming JSON
// and creates new `Person` instances.
});
这将在主线程上执行该块中的所有内容。对于核心数据的使用,这通常是一个好主意。 (甚至可能需要,查看文档,如果我没记错的话,还有关于Core Data& Threads的特殊部分。)
非常好奇,如果这样做的话。
旧回答:
vardump
的输出实际上并不是有效的JSON。您需要使用json_encode()
函数。
您可以通过执行以下操作将您从服务器收到的NSData
转换为字符串:
if let s = String(data: data, encoding: NSUTF8StringEncoding) {
println(s)
}
您没有提及您是使用Swift还是Objective-C,但上述内容很容易转换为Objective-C。