C JSON常常用于在不同的編程語言之間傳遞數據,然而在某些場合下我們需要將C JSON數據轉換成對應的數據結構,比如在iOS開發中,我們通常會將C JSON轉換成NSDictionary格式。
在iOS開發中,我們可以使用NSJSONSerialization類中的JSONObjectWithData方法將C JSON數據轉換成NSDictionary格式。然而有時候我們需要使用第三方庫來解析C JSON,比如在C++或者Objective-C++中使用。
下面我們以RapidJSON庫為例,介紹如何將C JSON轉換成NSDictionary格式。
#include "rapidjson/document.h" #include "rapidjson/prettywriter.h" #include "rapidjson/stringbuffer.h" using namespace rapidjson; NSDictionary* convertJsonToDictionary(const char* jsonString) { Document document; document.Parse(jsonString); if (document.HasParseError()) { printf("json parse error\n"); return NULL; } if (!document.IsObject()) { printf("json not a object\n"); return NULL; } NSDictionary *dictionary = [NSDictionary dictionary]; for (Value::ConstMemberIterator itr = document.MemberBegin(); itr != document.MemberEnd(); ++itr) { const char *key = itr->name.GetString(); if (itr->value.IsString()) { NSString *value = [NSString stringWithUTF8String:itr->value.GetString()]; [dictionary setValue:value forKey:[NSString stringWithUTF8String:key]]; } else if (itr->value.IsObject()) { NSDictionary *subDictionary = [self convertJsonToDictionary:itr->value.GetString()]; [dictionary setValue:subDictionary forKey:[NSString stringWithUTF8String:key]]; } else if (itr->value.IsArray()) { NSArray *subArray = [self convertJsonToArray:itr->value.GetString()]; [dictionary setValue:subArray forKey:[NSString stringWithUTF8String:key]]; } else if (itr->value.IsInt()) { [dictionary setValue:@(itr->value.GetInt()) forKey:[NSString stringWithUTF8String:key]]; } else if (itr->value.IsDouble()) { [dictionary setValue:@(itr->value.GetDouble()) forKey:[NSString stringWithUTF8String:key]]; } else if (itr->value.IsBool()) { [dictionary setValue:@(itr->value.GetBool()) forKey:[NSString stringWithUTF8String:key]]; } } return dictionary; }
上面是C++代碼示例,通過解析C JSON數據,然后分別處理字符串、對象、數組、整數、浮點數和布爾值,最終轉換成NSDictionary格式。
總之,無論何種編程語言,將C JSON轉換成目標數據結構都是開發中常見的需求,希望本文能夠對您有所幫助。
上一篇Python 整只皮卡丘
下一篇get方式傳json參數