2014-01-08 32 views
0

尽管我使用的是iOS,但我认为这并不重要。JSON:提供恒定值

我需要能够在JSON的两个值中使用常量。原因:我们在开发和生产中使用不同的服务器,并且不能将开发数据与生产数据混合在一起。在构建时,我们将根据环境设置(开发/生产)提供值。

因此,我该如何使用一个恒定值在下面的JSON“rsids”和服务器”:

{ 
    "version" : "1.0", 
    "analytics" : { 
     "rsids" : "//I would like to put a Constant Here", 
     "server" : "", 
     "charset" : "UTF-8", 
     "ssl" : false, 
     "offlineEnabled" : true, 
     "lifecycleTimeout" : 300, 
     "privacyDefault" : "optedin", 
     "poi" : [] 
    }, 
    "target" : { 
     "clientCode" : "", 
     "timeout" : 5 
    }, 
    "audienceManager" : { 
     "server" : "//I would like to put a Constant Here" 
    } 
} 

我希望能够做这样的事情:

NSStirng const *kServerURL = @"www.google.com" 

"audienceManager" : { 
     "server" : kServerUrl 
    } 

更新

没有词典我使用Adobe的iOS SDK for Site Catalyst,他们有一个JSON文件,我必须编辑和提供de RSID和服务器值。您在问题中看到的JSON是整个文件。

SDK也有一个库文件(.a)。这里是文档:http://microsite.omniture.com/t2/help/en_US/mobile/ios/index.html#ADBMobile_Class_and_Method_Reference

+0

你想做什么?你是否试图在JSON中发布一个常量值或者在运行时在JSON中使用一个常量值_received_? – memmons

+0

在JSON中发送一个常量值。 – user1107173

+0

基本上,常量的值将在构建时发生变化。 – user1107173

回答

0

如果你需要在编译时改变常量的值,你应该使用#if/ifdef和朋友这样做。

#ifdef DEBUG 
NSString const *kServerURL = @"www.google.com" 
#else 
NSString const *kServerURL = @"www.bing.com" 
#endif 
+0

这正是我们正在做的;然而,我无法弄清楚如何获取JSON文件(发布在问题中)来识别常量。 – user1107173

+0

@ user1107173,你是如何创建你正在序列化的字典? – CaptJak

+0

没有词典。我正在使用Adobe的iOS SDK for Site Catalyst。他们有一个JSON文件,我必须编辑并提供RSID和服务器值。您在问题中看到的JSON是整个文件。 SDK也有一个库文件(.a)。这里是文档:http://microsite.omniture.com/t2/help/en_US/mobile/ios/index.html#ADBMobile_Class_and_Method_Reference – user1107173

0

然后您必须创建多个文件。你不能让JSON文件变成动态的。

从代码创建文件时,可以使用常量。在@implementation部分之前,在.m文件的顶部,在多行上定义它们。一个用于开发,一个用于质量保证,另一个用于生产。注释掉你不想要的两个,然后离开你想要的那个。使用时,请使用格式。

"server":[NSString stringWithFormat:@"\"%@\"",kServerUrl]; 

有一个虚拟登录通常是一个好主意,可以安全地与您的服务器通信。这样的登录将会有一组数据被读取,并且任何上传都将被忽略。这对于在不同环境(包括生产)之间进行测试非常方便,并允许任何提交给App Store的应用程序都通过有效的登录进行全面测试。