zoukankan      html  css  js  c++  java
  • 【转】H5收不到iOS传递的JSON的解决方案

    经过分析失败的原因是

    • 因为JSON字符串带空格换行符,空格缘故
    /**
     *  JSON字符串转NSDictionary
     *
     *  @param jsonString JSON字符串
     *
     *  @return NSDictionary
     */
    + (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString {
        if (jsonString == nil) {
            return nil;
        }
        NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
        NSError *error;
        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
        if(error) {
            NSLog(@"json解析失败:%@",error);
            return nil;
        }
        return dic;
    }
    /**
     *  字典转JSON字符串
     *
     *  @param dic 字典
     *
     *  @return JSON字符串
     */
    + (NSString*) dictionaryToJson:(NSDictionary *)dic{
        NSError *parseError = nil;
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError];
        NSString *jsonString =  [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
       
        NSMutableString *mutStr = [NSMutableString stringWithString:jsonString];
        
        NSRange range = {0,jsonString.length};
        
        //去掉字符串中的空格
        
        [mutStr replaceOccurrencesOfString:@" " withString:@"" options:NSLiteralSearch range:range];
        
        NSRange range2 = {0,mutStr.length};
        
        //* 去掉字符串中的换行符 否则H5收不到 
        
        [mutStr replaceOccurrencesOfString:@"
    " withString:@"" options:NSLiteralSearch range:range2];
        
        return mutStr;
    }
    复制代码

    题外话

    • iOS11之后生成的jSON默认去掉空格和换行符

      • option NSJSONWritingSortedKeys
      if (@available(iOS 11.0, *))
      {
            NSData *jsonData = [NSJSONSerialization dataWithJSONObject:object
                                                               options:NSJSONWritingSortedKeys // Pass 0 if you don't care about the readability of the generated string
                                                                 error:&error];
      } 
    复制代码
    • iOS11之前生成的jSON默认带空格和换行符需要手动去掉
      NSData *jsonData = [NSJSONSerialization dataWithJSONObject:object
                                                               options:NSJSONWritingPrettyPrinted // Pass 0 if you don't care about the readability of the generated string
                                                                 error:&error];
    复制代码
    • 去掉空格和换行符
        NSMutableString *mutStr = [NSMutableString stringWithString:jsonString];
        
        NSRange range = {0,jsonString.length};
        
        //去掉字符串中的空格
        
        [mutStr replaceOccurrencesOfString:@" " withString:@"" options:NSLiteralSearch range:range];
        
        NSRange range2 = {0,mutStr.length};
        
        //去掉字符串中的换行符
        
        [mutStr replaceOccurrencesOfString:@"
    " withString:@"" options:NSLiteralSearch range:range2];
    
    复制代码

    移动端传给html 的json

    - (void)executeJsString:(NSString *)jsString JsonString:(NSString *)jsonString {
        jsString = [NSString stringWithFormat:@"%@(%@)", jsString, jsonString];//不要加 ' '
        [self.webView stringByEvaluatingJavaScriptFromString:jsString];
    }


    转自:https://juejin.im/post/5ab71b306fb9a028d7009007
    来源:掘金

  • 相关阅读:
    链表的快速排序算法
    浅析测试驱动
    java观察者模式的实现
    Markdown学习语法的记录
    自动化测试全聚合
    JAVA利用enum结合testng做数据驱动示例
    自动化测试关键字驱动的原理及实现
    HttpURLConnection GET/POST写法
    JAVA自动化测试中多数据源的切换
    JAVA生产者消费者的实现
  • 原文地址:https://www.cnblogs.com/linganxiong/p/12938407.html
Copyright © 2011-2022 走看看