【问题标题】:JSON: Providing Constant ValuesJSON:提供常量值
【发布时间】:2014-01-27 00:06:47
【问题描述】:

虽然我使用的是 iOS,但我认为这与这里无关。

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

因此,如何在下面的 JSON 中为“rsids”和 server”使用常量值:

{
    "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
    }

更新

没有字典。我将 Adob​​e 的 iOS SDK 用于 Site Catalyst。他们有一个 JSON 文件,我必须对其进行编辑并提供 RSID 和服务器值。您在问题中看到的 JSON 是整个文件。

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

【问题讨论】:

  • 你想做什么?您是尝试在 JSON 中发送一个常量值还是在运行时在 JSON 中使用一个常量值received
  • 在 JSON 中发送一个常量值。
  • 如果你想要不同的值,你必须创建多个文件。您不能让 JSON 文件像您正在寻找的那样是动态的。
  • 读取 JSON 文件并对其进行反序列化后,执行 [jsonDict setValue:theConstant forKeyPath:@"analytics.rsids"];[jsonDict setValue:theOtherConstant forKeyPath:@"audienceManager.server"];。 (确保在JSONObjectWithData 调用中使用NSJSONReadingMutableContainers 选项。)
  • 当然,另一种方法是使用"$$PLACEHOLDER1$$" 之类的内容代替需要更改的值,然后对 JSON 文件中的内容进行简单的文本替换,使用类似sed

标签: ios objective-c json


【解决方案1】:

如果您需要在构建时更改常量的值,您应该使用#if/#ifdef 和朋友这样做。

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

【讨论】:

  • 这正是我们正在做的;但是,我不知道如何让 JSON 文件(发布在问题中)来识别常量。
  • @user1107173,你是如何创建你正在序列化的字典的?
  • 没有字典。我将 Adob​​e 的 iOS SDK 用于 Site Catalyst。他们有一个 JSON 文件,我必须对其进行编辑并提供 RSID 和服务器值。您在问题中看到的 JSON 是整个文件。 SDK 也有一个库文件 (.a)。以下是文档:microsite.omniture.com/t2/help/en_US/mobile/ios/…
  • 我需要能够在构建时更改常量的值。
  • @user1107173 - 您需要在构建 JSON 文件之前更改常量。然后以某种方式将该常量合并到 JSON 文件的构建中。另一种选择是在读取文件后修改反序列化的 JSON。
【解决方案2】:

然后您必须创建多个文件。 JSON 文件不能是动态的。

从代码创建文件时,您可以使用常量。在 @implementation 部分之前的 .m 文件顶部,在多行中定义它们。一种用于开发,一种用于 QA,一种用于生产。注释掉你不想要的两个,留下你想要的。使用时,使用格式。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 2016-05-24
    • 2012-04-17
    相关资源
    最近更新 更多