一 json字符串与字典区别
1.1 json:
(JavaScript Object Notation)的首字母缩写,字面的意思是(javascript对象表示法),这里说的json指的是类似于javascript对象的一种数据格式对象,目前这种数据格式比较流行,逐渐替换掉了传统的xml数据格式, 前端使用ajax的时候后台返回该前端的数据格式就是json格式的。
字典是一种数据结构,而json是一种数据格式,
格式就会有一些形式上的限制,比如json的格式要求必须且只能使用双引号作为key或者值的边界符号(值如果是数字可以不用加双引号),不能使用单引号,用单引号或者不用引号会导致读取数据错误,而且“key”必须使用边界符(双引号),但字典就无所谓了,可以使用单引号,也可以使用双引号。
总结:
json的特点
1. 字符串外边有单引号
2. json是类字典的形式,里面的键-值对规定必须使用双引号,值如果是数字可以不加双引号,
但是键必须是双引号引起来的字符串, json的值可以是普通变量,数组,json对象
缺点:
json只有null、布尔、数字、字符串、数组和对象这几种数据类型,JSON没有日期类型
####################################
users = {
"admin": {
'username': 'admin',
"password": 123,
"nickname": "老王"
}
}
import json
以下两个函数用于json数据类型的转换
json.dumps() 字典 -> json
json.loads() json -> 字典
以下两个函数用于json数据类型转换的同时操作文件
json.dump()
json.load()
# 1. 数据类型的转换
# 其他类型转换为json字符串
json_str = json.dumps(users)
print(json_str, type(json_str))
# 读取json字符串,还原为原来的数据类型
json_obj = json.loads(json_str)
print(json_obj, type(json_obj))
#
# # 2. 类型转换的同时操作文件
# json.dump(users, open("d2.txt", "w"))
#
# data = json.load(open("d2.txt"))
# print(data)
参考链接:https://cloud.tencent.com/developer/article/1395008
1.2 Python字典与json的异同
2017年01月10日 08:12:36 GitzLiu 阅读数 8328
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/GitzLiu/article/details/54296971
我们先来看一下,python字典结构:
ab = {'liu':'liu@python.info','Larry':'larry@wall.org','Matsumoto':'matz@ruby-lang.org','Spammer':'spammer@hotmail.com'}
json数据形式:
{ "clusterInfo":{ "id":1324053971963, "startedOn":1324053971963, "state":"STARTED", "resourceManagerVersion":"0.23.1-SNAPSHOT", "resourceManagerVersionBuiltOn":"Tue Dec 13 22:12:48 CST 2011", "hadoopVersion":"0.23.1-SNAPSHOT", "hadoopVersionBuiltOn":"Tue Dec 13 22:12:26 CST 2011"}}
我们会发现,从形式来讲,这两者的确很像,都为 key : value 的形式,那么它们两者的异同是什么呢?
简单来说,python 字典的数据格式就json的数据格式。
但本质上来讲,字典是一种数据结构,json是一种格式;字典有很多内置函数,有多种调用方法,而json是数据打包的一种格式,并不像字典具备操作性,并且是格式就会有一些形式上的限制,比如json的格式要求必须且只能使用双引号作为key或者值的边界符号,不能使用单引号,而且“key”必须使用边界符(双引号),但字典就无所谓了。
形式上的相近也让python提供了json.loads()转换函数,方便json数据的调用。
使用方法如下:
import json
a=json.loads('{"a":"1","b":"2"}'
)printa
二 json字符串与字典互转(Object c)
2.1 字典转Json字符串
// 字典转Json字符串 NSDictionary *->NSData *->NSString *
2.1.1 json中不包含空格、换行
-(NSString*)convertToJsonData:(NSDictionary*)dict{
NSError*error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
NSString*jsonString;
if(!jsonData) {
NSLog(@"%@",error);
}else{
jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
}
NSMutableString *mutStr = [NSMutableString stringWithString:jsonString];
NSRangerange = {0,jsonString.length};
//去掉字符串中的空格
[mutStrreplaceOccurrencesOfString:@" " withString:@"" options:NSLiteralSearch range:range];
NSRangerange2 = {0,mutStr.length};
//去掉字符串中的换行符
[mutStrreplaceOccurrencesOfString:@"\n" withString:@"" options:NSLiteralSearch range:range2];
returnmutStr;
}
2.1.2 json串含有换行、空格
//字典转json格式字符串:
- (NSString*)dictionaryToJson:(NSDictionary *)dic
{
NSError *parseError = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError];
return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
---------------------
版权声明:本文为CSDN博主「最强王者-杜」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43202853/article/details/82699640
2.2 JSON字符串转化为字典
NSString *->NSData *->NSDictionary *
+ (NSDictionary*)dictionaryWithJsonString:(NSString*)jsonString
{
if(jsonString ==nil) {
returnnil;
}
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError*err;
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:&err];
if(err)
{
NSLog(@"json解析失败:%@",err);
returnnil;
}
returndic;
}
2.3 demo演示
2.3.1 json去除空格、换行
- (void)viewDidLoad {
[super viewDidLoad];
NSDictionary* dic =@{@"姓名":@"张三",
@"年龄":@14,
@"职业":@"学生"};
NSString*jsonStr = [selfconvertToJsonData:dic];
NSLog(@"\n字典dic:%@\n 二进制nsdata:%@\n json字符串:%@",dic,_jsonData,jsonStr);
}
2.3.2 json含有空格、换行
- (void)viewDidLoad {
[super viewDidLoad];
NSDictionary* dic =@{@"姓名":@"张三",
@"年龄":@14,
@"职业":@"学生"};
NSString*jsonStr = [selfdictionaryToJson:dic];
NSLog(@"\n字典dic:%@\n 二进制nsdata:%@\n json字符串:%@",dic,_jsonData,jsonStr);
}
三 补充NSData
简介
NSData为二进制数据,在文件操作(如保存到本地)、网络、以及核心图形图像中使用较广泛。
NSData的创建
//对象方法创建
NSData*data1 = [[NSDataalloc] init];
NSData*data2 = [[NSDataalloc] initWithData:data1];
//类方法创建
NSData*data3 = [NSDatadata];
NSData*data4 = [NSDatadataWithData:data3];
//由文件创建
NSString*filePath = [NSHomeDirectory() stringByAppendingString:@"/Desktop/test.txt"];
NSData*data5 = [[NSDataalloc] initWithContentsOfFile:filePath];
NSData*data6 = [NSDatadataWithContentsOfFile:filePath];
// 由 URL 创建
NSURL*urlPath = [NSURLURLWithString:[@"file://"stringByAppendingString:[NSHomeDirectory() stringByAppendingString:@"/Desktop/test.txt"]]];
NSData*data7 = [[NSDataalloc] initWithContentsOfURL:urlPath];
NSData*data8 = [NSDatadataWithContentsOfURL:urlPath];
// 由 字符串 创建
NSString*string =@"bei jing nin hao";
NSData*data9 = [string dataUsingEncoding:NSUTF8StringEncoding];
NSData*data10 = [string dataUsingEncoding:NSUTF8StringEncodingallowLossyConversion:YES];
// 可变 NSData 的创建
// 初始化时指定对象拥有的字节空间大小,在需要时会增加内存空间,在初始化时并没有分配内存空间
NSMutableData*data11 = [[NSMutableDataalloc] initWithCapacity:5];
NSMutableData*data12 = [NSMutableDatadataWithCapacity:5];
// 初始化时为对象分配指定长度的归零字节
NSMutableData*data13 = [[NSMutableDataalloc] initWithLength:10];
NSMutableData*data14 = [NSMutableDatadataWithLength:10];
注:以上代码原文地址http://www.cnblogs.com/QianChia/p/5782732.html#_label0
NSData与NSString、Byte、UIImage之间的转换
//NSString 转换成
NSDataNSString*str =@"Hello";
NSData*strData = [str dataUsingEncoding:NSUTF8StringEncoding];
//NSData 转换成
NSStringNSString*str1 = [[NSStringalloc]initWithData:strData encoding:NSUTF8StringEncoding];
//Byte 转换成 NSData
Byte byte[] = {1,2,3,4,5,6,7,8,9,10};
NSData*byteData = [[NSDataalloc] initWithBytes:byte length:10];
//NSData 转换成 Byte
Byte *testByte = (Byte *)[byteData bytes];
//UIImage 转换成 NSData
NSData*imageData1 =UIImagePNGRepresentation(UIImage*image);//png 格式
NSData*imageData2 =UIImageJPEGRepresentation(UIImage*image,CGFloatcompressionQuality)//jpeg格式
//NSData 转换成 UIImage
UIImage*aimage = [UIImageimageWithData: imageData];
作者:看影成痴
链接:https://www.jianshu.com/p/2f0fbbe6b8f1
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。