eval与json.loads对json的处理小记

2023-11-04 00:38
文章标签 json 处理 loads eval 小记

本文主要是介绍eval与json.loads对json的处理小记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

JSON有两种结构:

  • “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
  • 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

eval与json.loads都可以将大部分的JSON串转成python对象,但也有区别:

>>> import json>>> s = '{"one":1,"two":2}'>>> json.loads(s){u'two': 2, u'one': 1}>>> eval(s){'two': 2, 'one': 1}

json.loads与eval都能将s转成python中的对象,json.loads将json中的字符串转成unicode(types.UnicodeType),eval转成了str(types.StringType)。

对于普通的数据类型,json.loads和eval都能用,但:

>>> x="[null,true,false,1]">>> json.loads(x)[None, True, False, 1]>>> eval(x)Traceback (most recent call last):File "<stdin>", line 1, in <module>File "<string>", line 1, in <module>NameError: name 'null' is not defined

在遇到特殊类型的时候,eval就不管用了。eval通常用来执行一个字符串表达式,并返回表达式的值。比如:

>>> eval('1+1')2>>> json.loads('1+1')Traceback (most recent call last):File "<stdin>", line 1, in <module>File "/usr/lib/python2.7/json/__init__.py", line 338, in loadsreturn _default_decoder.decode(s)File "/usr/lib/python2.7/json/decoder.py", line 368, in decoderaise ValueError(errmsg("Extra data", s, end, len(s)))ValueError: Extra data: line 1 column 2 - line 1 column 4 (char 1 - 3)

eval与linux shell中的反引号(`)的作用差不多,如:

[root@zxh ~]# x=`expr 1 + 1`[root@zxh ~]# echo $x2


附:

  • json字符串转python对象的数据类型转换表

 

JSONPython
objectdict
arraylist
stringunicode
number (int)int, long
number (real)float
trueTrue
falseFalse
nullNone
  • python对象转json字符串类型转换表

 

PythonJSON
dictobject
list, tuplearray
str, unicodestring
int, long, floatnumber
Truetrue
Falsefalse
Nonenull
 
>>> dct = {'one':None,'two':2}>>> json.dumps(dct)'{"two": 2, "one": null}'
 
>>> arry = [True, False, 'hello']>>> json.dumps(arry)'[true, false, "hello"]'

另,需要注意的是:

>>> dct="{'one':1}">>> json.loads(dct)Traceback (most recent call last):File "<stdin>", line 1, in <module>File "/usr/lib/python2.7/json/__init__.py", line 338, in loadsreturn _default_decoder.decode(s)File "/usr/lib/python2.7/json/decoder.py", line 365, in decodeobj, end = self.raw_decode(s, idx=_w(s, 0).end())File "/usr/lib/python2.7/json/decoder.py", line 381, in raw_decodeobj, end = self.scan_once(s, idx)ValueError: Expecting property name: line 1 column 2 (char 1)

报错是因为json不认单引号,json中的字符串需要用双引号包起来

这篇关于eval与json.loads对json的处理小记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/341985

相关文章

IDEA如何将String类型转json格式

《IDEA如何将String类型转json格式》在Java中,字符串字面量中的转义字符会被自动转换,但通过网络获取的字符串可能不会自动转换,为了解决IDEA无法识别JSON字符串的问题,可以在本地对字... 目录问题描述问题原因解决方案总结问题描述最近做项目需要使用Ai生成json,可生成String类型

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

Python视频处理库VidGear使用小结

《Python视频处理库VidGear使用小结》VidGear是一个高性能的Python视频处理库,本文主要介绍了Python视频处理库VidGear使用小结,文中通过示例代码介绍的非常详细,对大家的... 目录一、VidGear的安装二、VidGear的主要功能三、VidGear的使用示例四、VidGea

Python结合requests和Cheerio处理网页内容的操作步骤

《Python结合requests和Cheerio处理网页内容的操作步骤》Python因其简洁明了的语法和强大的库支持,成为了编写爬虫程序的首选语言之一,requests库是Python中用于发送HT... 目录一、前言二、环境搭建三、requests库的基本使用四、Cheerio库的基本使用五、结合req

使用Python处理CSV和Excel文件的操作方法

《使用Python处理CSV和Excel文件的操作方法》在数据分析、自动化和日常开发中,CSV和Excel文件是非常常见的数据存储格式,ython提供了强大的工具来读取、编辑和保存这两种文件,满足从基... 目录1. CSV 文件概述和处理方法1.1 CSV 文件格式的基本介绍1.2 使用 python 内

Python中json文件和jsonl文件的区别小结

《Python中json文件和jsonl文件的区别小结》本文主要介绍了JSON和JSONL两种文件格式的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下... 众所周知,jsON 文件是使用php JSON(JavaScripythonpt Object No

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

Java解析JSON的六种方案

《Java解析JSON的六种方案》这篇文章介绍了6种JSON解析方案,包括Jackson、Gson、FastJSON、JsonPath、、手动解析,分别阐述了它们的功能特点、代码示例、高级功能、优缺点... 目录前言1. 使用 Jackson:业界标配功能特点代码示例高级功能优缺点2. 使用 Gson:轻量