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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立
我正在处理一些作为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
我有一个包含50K到100K字符串的字典(最多可以包含50个以上的字符),我正在尝试查找给定字符串是否在具有“编辑”距离公差的字典中。(例如Levenshtein)。在进行搜索之前,我可以预先计算任何类型的数据结构。我的目标是尽快针对该字典运行数千个字符串并返回最近的邻居。如果有一个明显更快的算法,我会得到一个bool值来说明给定的是否在字典中为此,我首先尝试计算所有Levenshtein距离并取最小值,这显然非常慢。所以我尝试根据这篇文章实现一个LevenshteinTriehttp://stevehanov.ca/blog/index.php?id=114在这里查看我的重现基准的要
字典基本上只是一个哈希表吗?还有一个好处:在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},
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭4年前。Improvethisquestion有谁知道一个好的字典API或ruby库来查找单词的定义?我认为它应该像这样工作:我调用get_definition(word)它返回该词的定义(最好以某种方式轻松格式化显示的定义。谢谢
我有一个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模板。
Python的字典get方法允许我指定在键不存在时应返回的内容。对于我目前的情况,我想要返回一本字典。我如何在Javascript中执行此操作? 最佳答案 没有与python字典get方法等效的javascript。如果你自己写,作为一个函数,它看起来像这样:functionget(object,key,default_value){varresult=object[key];return(typeofresult!=="undefined")?result:default_value;}像这样使用它:varobj={"a":1};
我正在尝试解析OpenExchangeRatesJSON在Json中,我正在使用这种方法:HttpWebRequestwebRequest=GetWebRequest("http://openexchangerates.org/latest.json");HttpWebResponseresponse=(HttpWebResponse)webRequest.GetResponse();stringjsonResponse=string.Empty;using(StreamReadersr=newStreamReader(response.GetResponseStream())){js
我有一个这样的字符串,它是从数据库中检索到的。我需要将字符串转换为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
请引用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接受这