将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"}}

 

几个需要注意的地方:

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

时间: 2024-07-28 16:45:57

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

list对象转换成json????????

问题描述 list对象转换成json???????? list集合里面放的是对象,其中有的对象的属性还是一个set对象集合,怎么转换成json,谢谢 解决方案 这种特殊情况建议自已写个工具类 解决方案二: List转换成JSON对象 1.准备工作......答案就在这里:List转换成JSON对象 解决方案三: 用一些工具类库,然后自己封装一下,以后就可以复用了. http://blog.csdn.net/samliao_2012/article/details/7297704 解决方案四: 一

Windows Powershell对象转换成文本_PowerShell

Out-Default可以将对象转换成可视的文本.事实上Out-Default会首先调用Format-Table,将更多的属性默认隐藏.再调用Out-Host将结果输出在控制台上.因此下面的三组命令执行结果是相同的. ls ls | Format-Table | Out-Host ls | Out-Default 显示隐藏的对象属性 要查看对象结果的所有属性,可是使用 ls | Format-Table * 这样因为属性和属性的内容太多可能不会显示完全,可以使用文本换行参数 ls | Forma

编写Python脚本把sqlAlchemy对象转换成dict的教程

  这篇文章主要介绍了编写Python脚本把sqlAlchemy对象转换成dict的教程,主要是基于Python的model类构建一个转换的方法,需要的朋友可以参考下 在用sqlAlchemy写web应用的时候,经常会用json进行通信,跟json最接近的对象就是dict,有时候操作dict也会比操作ORM对象更为方便,毕竟不用管数据库session的状态了. 假设数据库里有一张post表,其中一种方法就是 ? 1 2 p = session.query(Post).first() p.__di

java中对象的操作,将一个包含引用对象的对象转换成jsonStr格式的时候

问题描述 java中对象的操作,将一个包含引用对象的对象转换成jsonStr格式的时候 将一个包含引用对象的对象转换成jsonStr格式的时候以:引用对象名.引用对象属性:值,显示 例如:User user = new User(1,"tom"); {"user.id":"1","user.name":"tom"} 这种json字符串格式 解决方案 http://blog.csdn.net/snowdrea

Word文档批量转换成TXT文本

使用word编辑文档的时候,不仅可以保存成Word格式,也可以保存为其它格式.但有的时候需要将大批的已经编辑完成的Word文档转换成文本格式或其他格式文档,怎么办?如果通过"另存为"将是一件十分费时费力的事情.可能有人说了利用第三方工具软件吧,那是另一话题.在这里笔者要告诉大家的是:批量转换文档格式不求"人",完全可以借助Word本身自带的功能就可以完成批量转换文档格式的工作.为了叙述方便,专家以将Word文档格式批量转换成TXT文本格式为例来介绍其转换过程,具体操

请问,ASP.net如何把带html格式的内容转换成纯文本的文字

问题描述 请问,ASP.net如何把带html格式的内容转换成纯文本的文字 解决方案 解决方案二:使用正则表达式对字符串进行过滤解决方案三:publicstringLostHTML(stringStr){stringRe_Str="";if(Str!=null){if(Str!=string.Empty){stringPattern="<\/*[^<>]*>";Re_Str=Regex.Replace(Str,Pattern,"&q

解析PHP将对象转换成数组的方法(兼容多维数组类型)_php技巧

复制代码 代码如下:  /**  * @author   * @date 2013-6-21  * @todo 将对象转换成数组  * @param unknown_type $obj  * @return unknown  */ function object_to_array($obj){  $_arr = is_object($obj) ? get_object_vars($obj) :$obj;  foreach ($_arr as $key=>$val){   $val = (is_a

php把html转换成text文本函数

文章为各位提供一个php html转换成text文本函数哦,如果喜欢就行了. <?php if(!defined('DEDEINC')) {  exit("Request Error!"); } function SpHtml2Text($str) {  $str = preg_replace("/<sty(.*)/style>|<scr(.*)/script>|<!--(.*)-->/isU","",$

android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件

前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xstream 二: 把对象转换成xml android XMl 解析神奇xstream 三: 把复杂对象转换成 xml android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象   1.建立JavaBeen package com.android10; public clas