将Model对象转换成json文本或者json二进制文件

简介:

将Model对象转换成json文本或者json二进制文件

https://github.com/casatwy/AnyJson

注意:经过测试,不能够直接处理字典或者数组

主要源码的注释

AJTransformer.h 与 AJTransformer.m

//
//  AJTransformer.h
//  AnyJson
//
//  Created by casa on 14-9-19.
//  Copyright (c) 2014年 casa. All rights reserved.
//

#import <Foundation/Foundation.h>

@protocol AJSerializable;

@interface AJSerializer : NSObject

/**
 *  将对象转换成json二进制文件
 *
 *  @param object 对象
 *
 *  @return json二进制文件
 */
+ (NSData *)jsonDataWithObject:(id)object;

/**
 *  将对象转换成json字符串
 *
 *  @param object 对象
 *
 *  @return json字符串
 */
+ (NSString *)jsonStringWithObject:(id)object;

+ (id)objectWithJsonData:(NSData *)jsonData targetObjectClass:(Class)targetObjectClass;
+ (id)objectWithJsonString:(NSString *)jsonString targetObjectClass:(Class)targetObjectClass;

@end


//
//  AJTransformer.m
//  AnyJson
//
//  Created by casa on 14-9-19.
//  Copyright (c) 2014年 casa. All rights reserved.
//

#import "AJSerializer.h"
#import "AJObject2JsonSerializer.h"
#import "AJJson2ObjectSerializer.h"

@implementation AJSerializer

#pragma mark - public method
+ (NSData *)jsonDataWithObject:(id)object
{
    id basicObject = [AJObject2JsonSerializer serializeToBasicObject:object];
    return [NSJSONSerialization dataWithJSONObject:basicObject options:0 error:nil];
}

+ (NSString *)jsonStringWithObject:(id)object
{
    NSString *jsonString = [[NSString alloc] initWithData:[AJSerializer jsonDataWithObject:object] encoding:NSUTF8StringEncoding];
    return jsonString;
}

+ (id)objectWithJsonData:(NSData *)jsonData targetObjectClass:(Class)targetObjectClass
{
    id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
    return [AJJson2ObjectSerializer transformJsonObject:jsonObject toTargetObjectClass:targetObjectClass];
}

+ (id)objectWithJsonString:(NSString *)jsonString targetObjectClass:(Class)targetObjectClass
{
    NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
    return [AJSerializer objectWithJsonData:jsonData targetObjectClass:targetObjectClass];
}

@end

Model类:
//
//  Playground.h
//  AnyJson
//
//  Created by casa on 14-9-20.
//  Copyright (c) 2014年 casa. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "OtherObject.h"

@interface Playground : NSObject

@property (nonatomic, assign) NSInteger testInteger;
@property (nonatomic, strong) OtherObject *otherObject;

@end


//
//  OtherObject.h
//  AnyJson
//
//  Created by casa on 14-9-21.
//  Copyright (c) 2014年 casa. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface OtherObject : NSObject

@property (nonatomic, assign) NSInteger  testInteger;
@property (nonatomic, assign) BOOL       isTest;
@property (nonatomic, strong) NSString  *name;
@property (nonatomic, assign) char       testChar;

@end

使用的源码:

ViewController.m

//
//  ViewController.m
//  AnyJson
//
//  Created by casa on 14-9-19.
//  Copyright (c) 2014年 casa. All rights reserved.
//

#import "ViewController.h"
#import "AnyJson.h"
#import "Playground.h"
#import "AJClassHelper.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    

    Playground *playground   = [[Playground alloc] init];
    OtherObject *otherObject = [[OtherObject alloc] init];
    otherObject.testInteger  = 13;
    otherObject.isTest       = YES;
    otherObject.name         = @"casa";
    otherObject.testChar     = 'c';

    playground.otherObject   = otherObject;
    NSString *jsonString     = [AJSerializer jsonStringWithObject:playground];
    
    NSLog(@"json string is %@", jsonString);
}

@end

打印的信息:

2015-01-04 20:52:18.399 AnyJson[3825:149779] json string is {"testInteger":0,"otherObject":{"isTest":true,"name":"casa","testInteger":13,"testChar":"c"}}

 

几个需要注意的地方:

-此处是属性中包含了属性-

目录
相关文章
|
2月前
|
Web App开发 JSON JavaScript
SAP UI5 应用程序小技巧 - 一键将 JSON 对象导出成本地 json 文件
SAP UI5 应用程序小技巧 - 一键将 JSON 对象导出成本地 json 文件
25 0
|
29天前
|
存储 JSON 安全
【C++ JSON库 json值的创建手段】深入探究C++中JSON对象定位与操作:从引用到回调函数
【C++ JSON库 json值的创建手段】深入探究C++中JSON对象定位与操作:从引用到回调函数
61 0
|
1月前
|
JSON 前端开发 数据格式
vue-cli3读取本地json文件
vue-cli3读取本地json文件
49 1
|
2月前
|
编解码 JavaScript 前端开发
TypeScript【第三方声明文件、自定义声明文件、tsconfig.json文件简介、tsconfig.json 文件结构与配置】(六)-全面详解(学习总结---从入门到深化)
TypeScript【第三方声明文件、自定义声明文件、tsconfig.json文件简介、tsconfig.json 文件结构与配置】(六)-全面详解(学习总结---从入门到深化)
63 0
|
15天前
|
存储 JSON 数据挖掘
python逐行读取txt文本中的json数据,并进行处理
Python代码示例演示了如何读取txt文件中的JSON数据并处理。首先,逐行打开文件,然后使用`json.loads()`解析每一行。接着,处理JSON数据,如打印特定字段`name`。异常处理包括捕获`JSONDecodeError`和`KeyError`,确保数据有效性和字段完整性。将`data.txt`替换为实际文件路径运行示例。
12 2
|
20天前
|
JSON C语言 数据格式
C语言与lua通过json对象交互
C语言与lua通过json对象交互
16 1
|
21天前
|
JSON 数据格式
Json字符串与QVariantList 对象相互转换
Json字符串与QVariantList 对象相互转换
6 0
|
1月前
|
JSON 数据处理 API
盘点Python中4种读取JSON文件和提取JSON文件内容的方法
盘点Python中4种读取JSON文件和提取JSON文件内容的方法
292 0
|
1月前
|
存储 JSON JavaScript
Python中读写(解析)JSON文件的深入探究
Python中读写(解析)JSON文件的深入探究
31 0
|
1月前
|
存储 JSON JavaScript
Python如何解析json对象?
Python如何解析json对象?
25 1