我从服务器获得了一个json。
我只能解析一个JSON。但是当我同时获得2个json(或更多)时,我的解析不起作用。它无法正确反序列化。我该如何解决这个问题?
更新
例如,我发送了5个请求,时间间隔= 0.1;有时我会
{"status": "success", "msg": "Dish1 flagged"}
- 没关系。但有时我会得到
{"status": "success", "msg": "Dish1 flagged"}{"status": "success", "msg": "Dish2 flagged"}
- 这很糟糕,我的解析器不起作用。如果我收到了
{"status": "success", "msg": "Dish1 flagged"}{"status": "success", "msg": "Dish2 flagged"}
我希望第一个json移动到垃圾箱,第二个JSON开始解析。
JSON结构可能比这些结构复杂得多。我可以控制服务器并发送有效的JSON。
我的网络课程是
-(id) init
{
if(self=[super init])
{
receivedData = [[NSMutableData alloc] init];
}
return self;
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
[conn release];
conn = nil;
NSError *error;
NSDictionary *dictionary = [[CJSONDeserializer deserializer] deserializeAsDictionary:receivedData error:&error];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[receivedData appendData:data];
}
- (void) createConnectionWithRequest:(NSMutableURLRequest *)request delegate:(id)delegate
{
[receivedData setLength:0];
conn = [[NSURLConnection alloc] initWithRequest:request delegate:delegate startImmediately:YES];
}
答案 0 :(得分:1)
如何提供JSON?你能控制格式吗?
如果多个对象的结构为数组[{"like":"this"},{"or":"similar"}]
,则可能需要更改为
NSArray *array = [[NSArray alloc] init];
array = [[CJSONDeserializer deserializer] deserializeAsArray:receivedData error:&error];
但我没有使用过那个特定的解析器,所以语法可能不正确
答案 1 :(得分:0)
{"status": "success", "msg": "Dish1 flagged"}{"status": "success", "msg": "Dish2 flagged"}
无效的JSON。
[{"status": "success", "msg": "Dish1 flagged"}, {"status": "success", "msg": "Dish2 flagged"}]
有效。
由于您可以控制服务器,因此请确保它仅响应这些请求的有效JSON有效负载。如果问题是您将多个请求的响应连接在一起,那么请显示您的请求处理代码,以便我们可以帮助您停止这样做。
答案 2 :(得分:0)
如果无法更改服务器的输出格式,可以先将数据拆分为JSON数组,然后只使用数组中的最新数据。用大括号拆分它真的很容易。