字典、数组和json字符串的相互转化

本文介绍了如何使用NSJSONSerialization类实现JSON字符串与Objective-C字典之间的相互转换,包括将JSON字符串转换为字典和将字典转换为JSON字符串的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于字典、数组和json字符串的转化,主要用到的是NSJSONSerialization这个类里面的两个方法:

+ (nullable id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;

+ (nullable NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;

看上面两个方法,不难发现,不管字典转化为json字符串,还是json字符串转化为字典,都需要先以NSData类型为中转。

//将jsonString转化为字典
- (NSDictionary *)transformStringIntoDictionary:(NSString *)jsonString {
    //先将jsonString转化为NSData类型数据
    NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];

    NSError *error;

    //将NSData类型转化为NSDictionary类型,也可以转化为NSArray类型
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];

    return dic;
}
//将字典/数组转化为jsonString
- (NSString *)transformDictionaryIntoString:(NSDictionary *)dictionary {

    NSError *error;

    //先将NSDictonary转化为NSData类型
    NSData *data = [NSJSONSerialization dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&error];

    //再把NSdata类型转化为String类型
    NSString *jsonString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

    return jsonString;
}
### 将 JSON 数组字符串转换为 Python 列表 在 Python 中,可以利用 `json` 模块中的 `json.loads()` 函数来将表示 JSON 数组字符串解析为 Python 的列表对象。此方法适用于标准的 JSON 字符串格式。 以下是具体实现方式: #### 使用 `json.loads()` 解析 JSON 数组字符串 ```python import json # 假设有一个 JSON 数组形式的字符串 json_str = '["apple", "banana", "cherry"]' # 调用 json.loads() 进行解析 result_list = json.loads(json_str) print(result_list) # 输出: ['apple', 'banana', 'cherry'] ``` 通过上述代码可以看出,`json.loads()` 可以轻松地将 JSON 格式的字符串转化为对应的 Python 数据结构,在这里是列表[^1]。 如果遇到嵌套的复杂数据结构,例如包含字典或其他类型的组合,该方法同样适用: ```python complex_json_str = '[{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}]' parsed_data = json.loads(complex_json_str) print(parsed_data) # 输出: [{'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 30}] ``` 需要注意的是,输入的字符串必须严格遵循 JSON 格式;否则会抛出异常。例如,单引号 `'` 不被允许作为键或值的包裹符号,而双引号 `" "` 是必需的[^4]。 #### 处理非标准 JSON 字符串的情况 对于不符合 JSON 规范的字符串(比如使用了单引号),可以通过预处理将其调整为合法的 JSON 格式后再调用 `json.loads()`。一种常见的方式是替换非法字符或者手动修正语法错误。 示例代码如下所示: ```python non_standard_json = "['item1', 'item2', 'item3']" standard_json = non_standard_json.replace("'", '"') # 替换单引号为双引号 converted_list = json.loads(standard_json) print(converted_list) # 输出: ['item1', 'item2', 'item3'] ``` 这种方法能够有效解决部分不合规的字符串问题,但需谨慎操作以免引入新的错误[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值