NSString+JSON - iOS

日常开发中常用的一个相互转换的方法;

直接创建对应的类,引用如下方法即可实现;

具体 code 如下:

声明:

#import <Foundation/Foundation.h>

@interface NSString (JSON)

- (id)jsonObject;

/** dic -> json*/
- (NSString *)dictionaryToJson:(NSDictionary *)dic;

@end

实现:

#import "NSString+JSON.h"

extern void dictionaryFilterNullNode(NSMutableDictionary*);
extern void arrayFilterNullNode(NSMutableArray*);

void inline dictionaryFilterNullNode(NSMutableDictionary *dic) {
    NSMutableArray *deleteKeys = [NSMutableArray array];
    [[dic allKeys] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        id value = [dic objectForKey:obj];
        if ([value isKindOfClass:[NSNull class]]) {
            [deleteKeys addObject:obj];
        } else if([value isKindOfClass:[NSMutableArray class]]) {
            arrayFilterNullNode(value);
        } else if([value isKindOfClass:[NSMutableDictionary class]]) {
            dictionaryFilterNullNode(value);
        }
    }];
    [deleteKeys enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        [dic removeObjectForKey:obj];
    }];
    deleteKeys;
}

void inline arrayFilterNullNode(NSMutableArray *array) {
    [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        if ([obj isKindOfClass:[NSMutableDictionary class]]) {
            dictionaryFilterNullNode(obj);
        }
    }];
}

@implementation NSString (JSON)
- (id)jsonObject {
    NSError *error = nil;
    id result = [NSJSONSerialization JSONObjectWithData:[self dataUsingEncoding:NSUTF8StringEncoding]
                                                options:NSJSONReadingMutableContainers
                                                  error:&error];

    if (error || [NSJSONSerialization isValidJSONObject:result] == NO)
    {
        return self;
    }

    if ([result isKindOfClass:[NSMutableArray class]]) {
        arrayFilterNullNode(result);

    } else if([result isKindOfClass:[NSMutableDictionary class]]) {
        dictionaryFilterNullNode(result);

    }else if ([result isKindOfClass:[NSNull class]]){
//        result;
        NSLog(@"----->%@",result);
        return self;
    }

    return result;
}

//dic -> json
- (NSString *)dictionaryToJson:(NSDictionary *)dic {
    NSError *error = nil;

    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic
                                                       options:NSJSONWritingPrettyPrinted
                                                         error:&error];

    return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}

@end

  

NSDictionary+JSON - iOS 机票如下: NSDictionary+JSON - iOS

以上便是此次分享的内容,希望能对大家有所帮助!

原文地址:https://www.cnblogs.com/survivorsfyh/p/9670260.html

时间: 2024-11-02 11:11:37

NSString+JSON - iOS的相关文章

NSDictionary+JSON - iOS

日常开发中常用的一个相互转换的方法; 直接创建对应的类,引用如下方法即可实现; 具体 code 如下: 声明: #import <Foundation/Foundation.h> @interface NSDictionary (JSON) - (NSString *)jsonString; - (void)writeToJsonFile:(NSString *)path atomically:(BOOL)atomically; + (NSDictionary *)dictionaryWith

NSDictionary 或者NSArray(NSMutableArray) ==&gt;&gt; NSData ==&gt;&gt; NSString (Json):

以下代码都有详细的注释说明这些类型之间的转换(如有错误的地方还望批评指出,谢谢!) - (void)viewDidLoad { [super viewDidLoad]; /** * NSDictionary ||NSArray(NSMutableArray) ==>> NSData ==>> NSString (Json): */ // NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: // @&q

iOS NSDictionary &lt;--&gt; NSString(JSON) in Objc

NSDictionary --> NSString + (NSString*)stringINJSONFormatForObject:(id)obj { NSData *jsonData = [NSJSONSerialization dataWithJSONObject:obj options:0 // If that option is not set, the most compact possible JSON will be generated error:nil]; NSString

NSString+Check, iOS 判断手机号码格式是否正确

使用方法:新建一个继承于NSString的类,再导入NSString+Check.h头文件,通过判断字符串的属性值(checkPhoneNumInput)YES or NO 即可. //  NSString+Check.h //  ics // //  Created by Casystar on 15-4-2. //  Copyright (c) 2015年 dong. All rights reserved. // #import <Foundation/Foundation.h> @in

NSString json 车NSDictionary

NSData *jsonContent = [[userInfo objectForKey:@"acme"] dataUsingEncoding:NSUTF8StringEncoding]; NSDictionary * jsonDic = nil; NSError *error = nil; jsonDic =  [NSJSONSerializationJSONObjectWithData:jsonContent options:NSJSONReadingMutableLeavese

iOS端JSON转Model链式编程框架SuperKVC使用方法与原理

背景 在client编程中.字典转模型是一个极为常见的问题,苹果提供了KVC来实现NSDictionary到Model的注入,可是KVC仅仅能进行单层浅注入.且无法处理类型转换.key与属性名不正确应.深度注入等问题,笔者从Masonry得到启示,开发了一个通过链式配置注入器实现深度注入.类型转换.key-属性名映射等功能的轻量级注入框架SuperKVC.眼下已经开源到GitHub,点击这里前往.欢迎Star和Fork.欢迎和我一起完好这个框架! 本文将从应用和原理两个角度介绍SuperKVC

IOS解析JSON

JSON建构有两种结构: json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组2种结构,通过这两种结构可以表示各种复杂的结构 1.对象:对象在js中表示为“{}”扩起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字.字符串.数组.对象几种. 2.数组:数组在js中是中括号“[]”扩

ios Json的解析与创建

之前写过类似微信的语音功能,这里用到了json解析与创建 + (NSString *)voiceMessageConentWithEntity:(VMessageEntity *)entity{ NSLog(@"entity.voiceMessage.voicemd5 == %@",entity.voiceMessage.voicemd5); if (!entity) { return nil; } VChatVoiceEntity *voiceMessage = entity.voi

ios XML,JSON,数组解析并转换成NSMutableArray(List&lt;class&gt;)

一.简介 JSON解析: 通过正则将JSON([{...},{...}...])分解成多个包含实体实例内容的一小节({...}),在一小节中通过Runtime(运行时)(<objc/runtime.h>)将实体所有属性值找到并赋值(正则查找实现)到实例({...} --> 实体的一个实例),遍历所有小节({...})就将XML转换成NSMutableArray(类似:List<class>). XML 解析: 通过GDataXml(也可以通过正则)将XML分解成多个包含实体实