如何使用 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 .......
解压缩的内容有NSArray
和NSDictionary
我已经尝试转换为 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;
这个返回NO
。 NSString *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)?的主要内容,如果未能解决你的问题,请参考以下文章