如何使用 xcode 提取或解压缩 json 密钥(来自 API)?

Posted

技术标签:

【中文标题】如何使用 xcode 提取或解压缩 json 密钥(来自 API)?【英文标题】:How to extarct or unzip a json key (from API) uisng xcode? 【发布时间】:2017-01-19 07:51:30 【问题描述】:

这是我从API 压缩的JSON 值回复:

"response": 
"Status": 1,
"assetdescription": null,
"lastgatewayreport": "H4sIAAAAAAAAAM2V227jNhCGX4XQNaPwoAOlu7TuJi26ycJJG6BFYTAi4xCQRIOk3WSLfZg+S1+sI9mOLUeLJJvdor6x+c8MNfw1H/37X5H0XgejopLytMDrZSsbHZXRT6ZpHh4iHM2dXS424kTfymUdtmpXWXCBIyUD7NOnEHFM2TEjNEM0K5OiZAWk38gQojJJcaTvg9etty4qjyjpPjHB0d2yMcqEh4EYdLPQToalg41ZGgu+1rxeadcnQ1Jt5ndhULZw2vu+pl82NhjbQmfnJ9CI897A71NrFaxq2XVF4kTkoihy0SvKuC67C3d1eRonHMJZzntlHb6GsF9orTZPmS+8D9Cqh1j3HFib9tbC6ohCcyUrCSlpkZRMlJxpXjJ+y0rO16mNVdAu7K8M7NJW297vtFSmnXe2xgRS4eBt/74i0R8XpLbZiZ3Txm77YLCBVKpzA2I0z3J0bVqFzkxdo6nC6HtrwV9/s3RzjD6cICoIzzD65bI7gKzNCtq4lbXXnS0+rEBSY47tQnvWPapPPdwL7cx8VJ+dpUrX20ZY3tu0UbonDRRZVRsje482Q3xuXSNrPL28mn24mPbf311Mpvs97GxbD438cz03RxntR2SmDk2wbacdfeagYxV7LhyWfsIDNEU6RPPcNDe1np2+Hk5Kj8HTtaFFSURJs0c4c/LlcFI4WX4IZ/I14OQszknOBCdsDE5K85hmKUmyrPjGdCbfkk7OU3SNzqS7sQ5NHEaXskUTo+cWMD1BBaOEvoTMA7ueJ/PAwBejOT5J/ymar/FslOChWRsMP2fIWMkhwvu1Q4ZTIoYMX2kfZlN9Z+ZfQDHcidmj9ykp2Y5i/gaKOY3JE4q/yl8s4zFLRJJzOgoxyeIkTcFV9n9iWEDH4hUM/2oqSNPodKmd0w6m8DfbSjSxTiqJkWCUEvRefpSh/ufvFsbVtDFG7/W9qewzWA/9ewHVA0dfDvXoYL0V6h8v6Ozi3Tv8czdGaKKDrgKeaq/dSqtZgq9kN4PopApmBb3gs/UrQT/cV/D28avuhDe+g9FrYmD+lvRxg0cKntwRu8pPf/wLveleYoMLAAA=",
"Msg": "Success"

应该是这样的

"response": 
"Status": 1,
"assetdescription": null,
"lastgatewayreport": [
  
    "assetid": 1359,
    "assetname": "Jimmyy",
    "assetgroupname": null,
    "groupname": "Default",
    "groupid": 938,
    "datetime": "08/12/2016 16:49:29",
    "batt": 45,
    "extsensor": -100000,
    "extsensortype": null,
    "humidity": -100000,
    "temperatur .......

解压缩的内容有NSArrayNSDictionary

我已经尝试转换为 NSData 然后 JSONObjectWithData 但没有工作。

如何在目标 c 中解压缩该 json 密钥。我正在使用 AFNetworking。是否可以解压缩这些内容。

【问题讨论】:

看起来 lastgatewayreport 是一个 base64 gz 压缩数据。我不擅长Objective-C,但看起来你需要找到一个库来解压“base64 gz”。 txtwizard.net/compression 所以实际上你需要一个对象数组作为响应,并且你从 api 获得了超过响应然后你需要联系服务器团队,就像我在这里看到的那样?。 @vaibhav 我有另一种选择来获得明确的响应(没有 zip 内容),但我需要知道它是什么类型的 zip。我认为下面的答案 Jon Rose 分享了正确的链接。 【参考方案1】:

内容已压缩(在此处输入:http://www.txtwizard.net/compression)。获得数据后,您必须解压缩它,然后运行JSONObjectWithData。我在使用https://github.com/nicklockwood/GZIP 对 gzip 和 ungzip 数据进行了很好的体验。

【讨论】:

感谢乔恩·罗斯的分享。我用我的NSString 与你的第一个 txtwizard 进行了检查并解压,我在那里得到了输出。在代码中我没有得到。 - (BOOL)isGzippedData;这个返回NONSString *zipString = responseDict[@"lastgatewayreport"]; NSData *jsonData = [zipString dataUsingEncoding:NSUTF8StringEncoding]; BOOL isZipped = [jsonData isGzippedData]; 从*** answer 获得。 NSData* compressedData = [[NSData alloc] initWithBase64EncodedString:zipString options:0]; NSData *jsonData = [compressedData gunzippedData]; NSArray *json = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:&error];

以上是关于如何使用 xcode 提取或解压缩 json 密钥(来自 API)?的主要内容,如果未能解决你的问题,请参考以下文章

如何仅使用 Windows 的内置功能从脚本中压缩或解压缩?

如何使用Windows的内置功能从脚本中压缩或解压缩?

linux命令中tar后跟的zxvf是啥意思?

如何从 json 对象中获取密钥

提取所有 JSON 密钥

Linux命令(十六) 压缩或解压缩文件和目录 zip unzip