我对json有一些疑问!我希望有人可以帮助我!
我创建了一个游戏,现在我想将一些变量从我的游戏变成一个json文件!
所以我想问一下,是否有可能带浮标和数组
NSArray *points = [NSArray arrayWithObjects:
[NSValue valueWithCGPoint:CGPointMake(50.0, 150.0)],
[NSValue valueWithCGPoint:CGPointMake(350.0, 300.0)],nil];
进入json文件?!
另外,我想在json文件中为不同级别提供背景图像。
是否可以使用json或任何人知道更好的方法。
如果有人能告诉我的话会很棒。或者任何人都知道一个很好的教程?!
由于
答案 0 :(得分:2)
如果您不必序列化对象以在不同环境之间移动,那么我就不会打扰JSON ...如果您正在使用Web服务或其他东西,那么它们很棒...如果您有它们在值中,我会将它们存储在plist
中,假设您没有交换。
答案 1 :(得分:1)
要回答有关背景图像的问题......您只需将文件名/路径存储到图像中即可。这样,多个文件或级别可能会引用同一资产。
答案 2 :(得分:0)
JSON支持哈希(字典)和数组作为容器,它们可以包含哈希,数组,数字,字符串和布尔值。因此,要捕获这些数据,您可能会有这样的结构:
{
"points":[
[50.0, 150.0],
[350.0, 300.0]
]
}
用这样的东西读回来:
NSArray *pointsData = [json objectForKey:@"points"];
NSArray *points = [NSArray arrayWithObjects:
[NSValue valueWithCGPoint:CGPointMake(
[[pointsData objectAtIndex:0] objectAtIndex:0],
[[pointsData objectAtIndex:0] objectAtIndex:1]
)],
[NSValue valueWithCGPoint:CGPointMake(
[[pointsData objectAtIndex:1] objectAtIndex:0],
[[pointsData objectAtIndex:1] objectAtIndex:1]
)],
nil];
答案 3 :(得分:0)
Cocoa在其JSON支持中仅支持这些类型。
NSNumber (integer, float, boolean)
NSString
NSArray
NSDictionary
无论您想要保存/加载什么,都应该将数据组织为仅使用这些类型。不支持直接使用NSValue
,因此您需要制作类似的内容。
NSDictionary* point = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithFloat:444f],
@"x",
[NSNumber numberWithFloat:555f],
@"y",
nil];
并保存字典。 此外,您还可以使用主要为属性列表设计的等效new literal syntax。
NSDictionary* point = @{ @"x" : @444f, @"y": @555f };
这与上面的例子相同。
CAVEAT :将数据保存到JSON或属性列表时,NSDictionary
的所有键都必须为NSString
。
如果您只定位iOS,Property List始终是正确的,也是保存/加载少量变量的更好选择。 Xcode也会为你提供更好的编辑器。
在Cocoa中对JSON的支持只是 Property List 的一个子集,而且大部分都是类似的。因此,首先查看属性列表,然后您将能够轻松地使用PLIST或JSON。 (这就是为什么Cocoa中没有JSON的指导文件)
可以将图像数据保存在JSON或Property List中,但通常不建议这样做。因为JSON或PLIST需要立即加载。这意味着必须将所有文件内容加载到内存中。如果将多个图像放在JSON或PLIST文件中,它将容易变大到多兆字节。 iOS设备没有太多内存,因此您的程序可能会崩溃。
因此建议仅在JSON或PLIST文件中存储路径到图像文件 - 就像@JoelMartinez指示的那样 - 并直接从路径加载每个图像文件。