草庐IT

iOS JSON转字典

西充小凡哥 2023-03-28 原文

1.应用场景
接口传输数据时,有时需要用POST传一长串string数据,一般要求转为json格式方便服务器解析
2.需要转义的字符说明及oc方法实现
NSString转json时若包含以下字符,需要进行转义
" (双引号)
/ (正斜线)
\n (换行符)
\b (退格符)
\f (换页符)
\r (回车符)
\t (制表符,一个tab或按8下空格)

oc方法如下

  • (NSString *)string2JSONString:(NSString *)string {
    NSMutableString *s = [NSMutableString stringWithString:string];
    [s replaceOccurrencesOfString:@""" withString:@"\"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
    [s replaceOccurrencesOfString:@"/" withString:@"\/" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
    [s replaceOccurrencesOfString:@"\n" withString:@"\n" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
    [s replaceOccurrencesOfString:@"\b" withString:@"\b" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
    [s replaceOccurrencesOfString:@"\f" withString:@"\f" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
    [s replaceOccurrencesOfString:@"\r" withString:@"\r" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
    [s replaceOccurrencesOfString:@"\t" withString:@"\t" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
    return [NSString stringWithString:s];
    }
    3.读取文本文件内容POST方法上传,参数放在body内

  • (void)uploadJsonStringAsyn{
    //读取txt文件内容(包含回车空格等特殊字符)转为jsonString
    NSMutableDictionary params = [[NSMutableDictionary alloc] init];
    NSString midiPath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"txt"];
    NSFileHandle
    readHandle = [NSFileHandle fileHandleForReadingAtPath:midiPath];
    [readHandle seekToFileOffset:0];
    NSData
    data = [readHandle readDataToEndOfFile];
    NSString *midiStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    params[@"jsonString"] = [self string2JSONString:midiStr];

    //设置上传地址
    NSString *urlString = [NSString stringWithFormat:@"http://"];
    NSURL *url = [NSURL URLWithString:urlString];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"POST"];
    [request addValue:@"application/json;charset=UTF-8" forHTTPHeaderField:@"Content-Type"];

    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params options:NSJSONWritingPrettyPrinted error:nil];
    //添加参数
    [request setHTTPBody:jsonData];

    //创建session对象
    NSURLSession *session = [NSURLSession sharedSession];

    //创建一个请求任务
    NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    NSString *result = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"POST%@",result);
    }];

    [task resume];
    }
    4.iOS字典(NSDictionary)和JSON字符串之间互转
    注意: 若midiStr是字典中键对应值,无需调用string2JSONString:

    NSMutableDictionary params = [[NSMutableDictionary alloc] init];
    NSString midiPath = [[NSBundle mainBundle] pathForResource:@"test11" ofType:@"txt"];
    NSFileHandle
    readHandle = [NSFileHandle fileHandleForReadingAtPath:midiPath];
    [readHandle seekToFileOffset:0];
    NSData
    data = [readHandle readDataToEndOfFile];
    NSString *midiStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    params[@"info"] = midiStr;

    NSString *jsonString = [self convert2JSONWithDictionary:params];
    [self convert2DictionaryWithJSONString:jsonString];
    4-1 字典转JSON

  • (NSString *)convert2JSONWithDictionary:(NSDictionary *)dic{
    NSError *err;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:0 error:&err];

    NSString *jsonString;
    if (!jsonData) {
    NSLog(@"%@",err);
    }else{
    jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
    }
    NSLog(@"%@",jsonString);
    return jsonString;
    }
    4-2 JSON转字典

  • (NSDictionary *)convert2DictionaryWithJSONString:(NSString *)jsonString{
    NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
    NSError *err;
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
    options:NSJSONReadingMutableContainers
    error:&err];
    if(err)
    {
    NSLog(@"%@",err);
    return nil;
    }
    return dic;
    }

作者:Jesscia_Liu
链接:https://www.jianshu.com/p/2cea35159160
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

有关iOS JSON转字典的更多相关文章

  1. 微信小程序通过字典表匹配对应数据 - 2

    前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立

  2. python - 将 Ruby 哈希字符串转换为 Python 字典 - 2

    我正在处理一些作为Ruby哈希字符串返回的命令输出。(来自名为mcollective的东西)。这是我收到的示例字符串:{:changes=>{"total"=>0},:events=>{"failure"=>0,"success"=>0,"total"=>0},:version=>{"puppet"=>"2.7.21(PuppetEnterprise2.8.1)","config"=>1381497648},:time=>{"filebucket"=>0.000287,"cron"=>0.00212,"package"=>0.398982,"exec"=>0.001314,"confi

  3. ruby - Ruby 字符串字典中的快速模糊/近似搜索 - 2

    我有一个包含50K到100K字符串的字典(最多可以包含50个以上的字符),我正在尝试查找给定字符串是否在具有“编辑”距离公差的字典中。(例如Levenshtein)。在进行搜索之前,我可以预先计算任何类型的数据结构。我的目标是尽快针对该字典运行数千个字符串并返回最近的邻居。如果有一个明显更快的算法,我会得到一个bool值来说明给定的是否在字典中为此,我首先尝试计算所有Levenshtein距离并取最小值,这显然非常慢。所以我尝试根据这篇文章实现一个LevenshteinTriehttp://stevehanov.ca/blog/index.php?id=114在这里查看我的重现基准的要

  4. ruby - 字典=哈希? - 2

    字典基本上只是一个哈希表吗?还有一个好处:在Ruby代码“Hash.new{0}”中,末尾的“{0}”是什么意思? 最佳答案 table、dictionary和map这三个词通常作为同义词使用(在数据结构的上下文中)。哈希表/HashMap是一种表/字典/图。{0}是一个忽略其参数并返回数字0的block(匿名函数)。调用提供给Hash.new的block以生成一个在HashMap中找不到键时的默认值。即如果我执行h=Hash.new{0}然后h["keythatdoesnotexist"],我返回0,而不是nil(如果没有{0},

  5. ruby - 字典 API 或库 - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭4年前。Improvethisquestion有谁知道一个好的字典API或ruby​​库来查找单词的定义?我认为它应该像这样工作:我调用get_definition(word)它返回该词的定义(最好以某种方式轻松格式化显示的定义。谢谢

  6. javascript - 如何从 JSON 字典中按键检索随机 JSON 对象? - 2

    我有一个JSON对象,它由一长串其他JSON对象组成,这些对象具有一些共同的属性,例如:varmyData={"0291":{"Firstname":"Jeremy","Surname":"Dyson"},"0398":{"Firstnname":"Billy","Surname":"Bunter"},"6714":{"Firstnname":"Harry","Surname":"Peterson"},"9080":{"Firstnname":"Barry","secondname":"Joe","Surname":"Mainwaring"}......}我已经构建了一个html模板。

  7. javascript - Python 的字典 get 方法的 Javascript 等价物是什么 - 2

    Python的字典get方法允许我指定在键不存在时应返回的内容。对于我目前的情况,我想要返回一本字典。我如何在Javascript中执行此操作? 最佳答案 没有与python字典get方法等效的javascript。如果你自己写,作为一个函数,它看起来像这样:functionget(object,key,default_value){varresult=object[key];return(typeofresult!=="undefined")?result:default_value;}像这样使用它:varobj={"a":1};

  8. c# - JavaScriptSerializer.Deserialize() 到字典中 - 2

    我正在尝试解析OpenExchangeRatesJSON在Json中,我正在使用这种方法:HttpWebRequestwebRequest=GetWebRequest("http://openexchangerates.org/latest.json");HttpWebResponseresponse=(HttpWebResponse)webRequest.GetResponse();stringjsonResponse=string.Empty;using(StreamReadersr=newStreamReader(response.GetResponseStream())){js

  9. javascript - 将字符串转换为 javascript 字典 - 2

    我有一个这样的字符串,它是从数据库中检索到的。我需要将字符串转换为Javascript字典。"['content':{'type':'file','path':'callie/circle'},'video':{'videoId':'CvIr-2lMLsk','startSeconds':15,'endSeconds':30'}]".如何将上述字符串转换为Javascript字典?我应该先将字符串转换为json吗?当我尝试json.parse时,显示错误:UncaughtSyntaxError:Unexpectedtoken'atObject.parse(native)at:2:6at

  10. c# - 模型从 ASP.NET Web API 中的 URI 绑定(bind)到字典 - 2

    请引用MVC中的此链接:http://aspnetwebstack.codeplex.com/discussions/351011我在模型绑定(bind)方面遇到了问题。我从JavaScript向名为“/api/products”的API端点发出GETAjax请求,传入一些参数,包括分页和排序作为查询参数。这是完整的URI:http://localhost/api/products?page=1&count=10&filter[name]=Test1&filter[price]=10&sorting[name]=desc在服务器端,我有一个WebAPIController从URI接受这

随机推荐