嗨,我是 obj-c 的新手。
我在 json 上得到了一些奇怪的结果。 我有一个由 NSThread 调用的 json 函数, 当我第一次运行我的 json 函数时,它显示了一个结果,但是当该函数第二次调用时,它返回 null。
这是我的 json 函数:
- (void) updatePaxWithBook:(Book*)_book{
NSString* bookCode = _book.bookCode;
NSString* url = [NSString stringWithFormat:@"%@/?book_code=%@", URL_UPDATE_PAX,bookCode];
url = [url stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
JSONDecoder* jDecoder = [[JSONDecoder alloc] init];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
jObject = [jDecoder objectWithData:response];
NSString* errCode =@"";
if ([[jObject objectForKey:@"err_code"] isKindOfClass:[NSNumber class]]) {
errCode = [[jObject objectForKey:@"err_code"] stringValue];
} else {
errCode = [jObject objectForKey:@"err_code"];
}
NSLog(@"OUT >> %@",jObject);
NSLog(@"OUT >> %@",errCode);
}
所以当我运行我的第一个 json 时,这是响应:
{ "err_code": 0, "book_code": "1XX1AS", "pax_num": [1,0,0], "pax_name": ["USER NAME"] }
NSLog 显示一些结果:
OUT >> {
"book_code" = 1XX1AS;
"err_code" = 0;
"pax_name" = (
USER NAME
);
"pax_num" = (
1,
0,
0
);}
OUT >> 0
但是当函数第二次调用时,响应如下:
{ "err_code": 001002, "err_msg": "Validation error: there are no changes on original data." }
和 NSLog 显示一些 null
OUT >> (null)
OUT >> (null)
我的代码有什么问题,我该怎么办?
最佳答案
通过 http://jsonlint.com 运行您的第二个 JSON你会发现它不喜欢第二个例子中数字的前导零。
我通过 NSJSONSerialization 运行您的第二个示例来确认这一点(这给了我一个 NSError 对象):
NSError *error = nil;
jObject = [NSJSONSerialization JSONObjectWithData:response options:0 error:&error];
if (error)
NSLog(@"JSON error: %@", error);
else
NSLog(@"JSON result: %@", jObject);
生成的 NSError 对象包含以下错误消息:
Number with leading zero around character 15.
您是如何生成该 JSON 的?您是编写自己的 JSON 字符串,还是使用标准的 JSON 函数调用?
该数字错误代码不应该有前导零,或者应该用引号引起来。无论生成 JSON 错误响应的是什么,都没有正确编码 JSON。
关于iphone - 第二次调用时,iOS JSON 解析返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16569485/
我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我正在使用ruby1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案
所以我开始关注ruby,很多东西看起来不错,但我对隐式return语句很反感。我理解默认情况下让所有内容返回self或nil但不是语句的最后一个值。对我来说,它看起来非常脆弱(尤其是)如果你正在使用一个不打算返回某些东西的方法(尤其是一个改变状态/破坏性方法的函数!),其他人可能最终依赖于一个返回对方法的目的并不重要,并且有很大的改变机会。隐式返回有什么意义?有没有办法让事情变得更简单?总是有返回以防止隐含返回被认为是好的做法吗?我是不是太担心这个了?附言当人们想要从方法中返回特定的东西时,他们是否经常使用隐式返回,这不是让你组中的其他人更容易破坏彼此的代码吗?当然,记录一切并给出
简而言之错误:NOTE:Gem::SourceIndex#add_specisdeprecated,useSpecification.add_spec.Itwillberemovedonorafter2011-11-01.Gem::SourceIndex#add_speccalledfrom/opt/local/lib/ruby/site_ruby/1.8/rubygems/source_index.rb:91./opt/local/lib/ruby/gems/1.8/gems/rails-2.3.8/lib/rails/gem_dependency.rb:275:in`==':und
为什么以下不同?Time.now.end_of_day==Time.now.end_of_day-0.days#falseTime.now.end_of_day.to_s==Time.now.end_of_day-0.days.to_s#true 最佳答案 因为纳秒数不同:ruby-1.9.2-p180:014>(Time.now.end_of_day-0.days).nsec=>999999000ruby-1.9.2-p180:015>Time.now.end_of_day.nsec=>999999998
在Ruby1.9.3(可能还有更早的版本,不确定)中,我试图弄清楚为什么Ruby的String#split方法会给我某些结果。我得到的结果似乎与我的预期相反。这是一个例子:"abcabc".split("b")#=>["a","ca","c"]"abcabc".split("a")#=>["","bc","bc"]"abcabc".split("c")#=>["ab","ab"]在这里,第一个示例返回的正是我所期望的。但在第二个示例中,我很困惑为什么#split返回零长度字符串作为返回数组的第一个值。这是什么原因呢?这是我所期望的:"abcabc".split("a")#=>["bc"
我在破坏脚本的字符串中出现了一些奇怪的字符。据我所知,通过putbadstring到控制台,它们是"\0\0\0\0"。我想对此进行测试,以便我可以忽略它们...但是如何呢?以为这就是blank?和empty?的用途?!?:>badstring="\0"=>"\u0000">badstring.blank?NoMethodError:undefinedmethod`blank?'for"\u0000":Stringfrom(irb):97from/Users/meltemi/.rvm/rubies/ruby-2.0.0-p195/bin/irb:16:in`'>badstring.em