相关疑难解决方法(0)

如何将Django QuerySet转换为dicts列表?

如何将Django QuerySet转换为dicts列表?我还没有找到答案,所以我想知道我是否错过了每个人都使用的某种常见助手功能.

python django

98
推荐指数
5
解决办法
10万
查看次数

格式浮动标准json模块

我在python 2.6中使用标准的json模块来序列化浮点数列表.但是,我得到的结果如下:

>>> import json
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Run Code Online (Sandbox Code Playgroud)

我希望浮点数只用两位小数进行格式化.输出应如下所示:

>>> json.dumps([23.67, 23.97, 23.87])
'[23.67, 23.97, 23.87]'
Run Code Online (Sandbox Code Playgroud)

我尝试过定义自己的JSON Encoder类:

class MyEncoder(json.JSONEncoder):
    def encode(self, obj):
        if isinstance(obj, float):
            return format(obj, '.2f')
        return json.JSONEncoder.encode(self, obj)
Run Code Online (Sandbox Code Playgroud)

这适用于唯一的浮动对象:

>>> json.dumps(23.67, cls=MyEncoder)
'23.67'
Run Code Online (Sandbox Code Playgroud)

但嵌套对象失败:

>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Run Code Online (Sandbox Code Playgroud)

我不想有外部依赖,所以我更喜欢坚持使用标准的json模块.

我怎样才能做到这一点?

python floating-point formatting json

89
推荐指数
9
解决办法
6万
查看次数

python内部类的目的是什么?

Python的内部/嵌套类使我感到困惑.有没有它们无法实现的东西?如果是这样,那是什么东西?

python oop language-features class

86
推荐指数
7
解决办法
5万
查看次数

将字典写入文本文件?

我有一本字典,我正在尝试将其写入文件.

exDict = {1:1, 2:2, 3:3}
with open('file.txt', 'r') as file:
    file.write(exDict)
Run Code Online (Sandbox Code Playgroud)

然后我有错误

file.write(exDict)
TypeError: must be str, not dict
Run Code Online (Sandbox Code Playgroud)

所以我修复了这个错误,但又出现了另一个错

exDict = {111:111, 222:222}
with open('file.txt', 'r') as file:
    file.write(str(exDict))
Run Code Online (Sandbox Code Playgroud)

错误:

file.write(str(exDict))
io.UnsupportedOperation: not writable
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么办,因为我还是python的初学者.如果有人知道如何解决问题,请提供答案.

注意:我使用的是python 3,而不是python 2

dictionary file file-writing python-3.x

59
推荐指数
6
解决办法
15万
查看次数

在AWS Lambda中将DynamoDB数据格式化为普通JSON

我正在使用AWS Lambda扫描DynamoDB表中的数据.这是我得到的回报:

{
  "videos": [
    {
      "file": {
        "S": "file1.mp4"
      },
      "id": {
        "S": "1"
      },
      "canvas": {
        "S": "This is Canvas1"
      }
    },
    {
      "file": {
        "S": "main.mp4"
      },
      "id": {
        "S": "0"
      },
      "canvas": {
        "S": "this is a canvas"
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我的前端应用程序正在使用Ember Data Rest Adapter,它不接受此类响应.有什么方法可以获得正常的JSON格式吗?有一个NPM模块被调用dynamodb-marshaler来将DynamoDB数据转换为普通的JSON.如果可能的话,我正在寻找原生解决方案.

json amazon-web-services amazon-dynamodb aws-lambda

36
推荐指数
6
解决办法
3万
查看次数

Python到JSON序列化在Decimal上失败

我有一个包含一些小数的python对象.这导致json.dumps()中断.

我从SO得到了以下解决方案(例如Python JSON序列化一个Decimal对象),但重新解决的解决方案仍然不起作用.Python网站 - 有完全相同的答案.

有任何建议如何使这项工作?

谢谢.以下是我的代码.看起来dumps()甚至没有进入专门的编码器.

clayton@mserver:~/python> cat test1.py
import json, decimal

class DecimalEncoder(json.JSONEncoder):
        def _iterencode(self, o, markers=None):
                print "here we go o is a == ", type(o)
                if isinstance(o, decimal.Decimal):
                        print "woohoo! got a decimal"
                        return (str(o) for o in [o])
                return super(DecimalEncoder, self)._iterencode(o, markers)

z = json.dumps( {'x': decimal.Decimal('5.5')}, cls=DecimalEncoder )
print z
clayton@mserver:~/python> python test1.py
Traceback (most recent call last):
  File "test1.py", line 11, in <module>
    z = json.dumps( {'x': decimal.Decimal('5.5')}, cls=DecimalEncoder )
  File …
Run Code Online (Sandbox Code Playgroud)

python json decimal

30
推荐指数
3
解决办法
4万
查看次数

Python JSON编码器支持datetime?

是否有任何优雅的方式使Python JSON编码器支持日期时间?一些第三方模块或简单的黑客?

我正在使用龙卷风的数据库包装器从db中获取一些原始数据以生成json.查询结果包括常规MySQL时间戳列.

Python的默认json编码器不支持自己的日期时间类型,这是非常烦人的,这在所有类型的数据库查询中都很常见.

我不想修改Python自己的json编码器.任何好的做法?非常感谢!

ps:我通过修改Python JSON编码器默认方法找到了一个脏黑客:

更改:

def default(self, o):
    raise TypeError(repr(o) + " is not JSON serializable")
Run Code Online (Sandbox Code Playgroud)

至:

def default(self, o):
    from datetime import date
    from datetime import datetime
    if isinstance(o, datetime):
        return o.isoformat()
    elif isinstance(o, date):
        return o.isoformat()
    else:
        raise TypeError(repr(o) + " is not JSON serializable")
Run Code Online (Sandbox Code Playgroud)

好吧,它只是开发环境的临时解决方案.

但是对于长期解决方案或生产环境,这非常难看,每次部署到新服务器时我都必须进行修改.

有没有更好的办法?我不想修改Python代码本身,也不想修改Tornado源代码.我能用自己的项目代码做些什么来实现这一目标吗?最好是一步到位.

非常感谢!

python mysql json tornado ios5

22
推荐指数
4
解决办法
2万
查看次数

“Decimal”类型的对象不可 JSON 序列化

由于客户函数错误,Lambda 执行失败,状态为 200:“Decimal”类型的对象不可 JSON 序列化

我在以下链接中浏览了所有现有的解决方案,但没有任何对我有用。我做错了什么?: Python JSON 序列化 Decimal 对象

import json
import boto3
import decimal


client = boto3.resource('dynamodb')
table = client.Table('table')

def lambda_handler(event, context):
    method = event["httpMethod"]
    print(event)
    if method=="POST":
        return POST(event)
    elif method=="DELETE":
        return DELETE(event)
    elif method=="GET":
        return GET(event)

#the respons format
def send_respons(responseBody, statusCode):
    response = {
        "statusCode": statusCode,
        "headers": {
            "my_header": "my_value"
        },
        "body": json.dumps(responseBody),
        "isBase64Encoded": 'false'
    }
    return response
    

def GET(event):
    tab = table.scan()['Items']
    ids = []
            for item in tab:
                    ids.append({"id":item["id"], "decimalOBJ":decimal.Decimal(item["decimalOBJ"]}))
            return …
Run Code Online (Sandbox Code Playgroud)

python json

13
推荐指数
3
解决办法
4万
查看次数

反序列化包含任意精度浮点数的json字符串,并将其序列化回来

Python 没有内置的任意精度浮点数。这是一个例子:

>>> float(4.4257052820783003)
4.4257052820783
Run Code Online (Sandbox Code Playgroud)

因此,无论您使用什么,都不能拥有任意精度的浮点对象。

假设我有一个包含任意精度浮点数的JSON 字符串( )。json_string = '{"abc": 4.4257052820783003}'如果我加载该字符串,Python 将剪切该数字:

>>> dct = json.loads(json_string)
>>> dct
{'abc': 4.4257052820783}
Run Code Online (Sandbox Code Playgroud)

我设法通过使用以下方法来避免这种信息丢失decimal.Decimal

>>> dct = json.loads(json_string, parse_float=Decimal)
>>> dct
{'abc': Decimal('4.4257052820783003')}
Run Code Online (Sandbox Code Playgroud)

现在,我想将此dct对象序列化为原始 JSON 格式的字符串。json.dumps(dct)显然不起作用(因为 Decimal 类型的对象不可 JSON 序列化)。我尝试子类化json.JSONEncoder并重新定义其default方法:

class MyJSONEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, Decimal):
            return str(o)
        return super().default(o)
Run Code Online (Sandbox Code Playgroud)

但这显然是创建一个字符串而不是数字:

>>> MyJSONEncoder().encode(dct)
'{"abc": "4.4257052820783003"}'
Run Code Online (Sandbox Code Playgroud)

如何将Decimal对象序列化为 JSON 数字(实数)而不是 JSON 字符串?换句话说,我希望编码操作返回原始json_string字符串。理想情况下不使用外部包(但仍然欢迎使用外部包的解决方案)。

这个问题当然非常相关,但我在那里找不到答案:Python …

python json

10
推荐指数
1
解决办法
993
查看次数

十进制到JSON

我从数据库中提取一个十进制值的总和.我正在尝试在JSON结果中使用该值

json.dumps( { 'sum': amount } ) #where amount is my Decimal
Run Code Online (Sandbox Code Playgroud)

Django无法序列化Decimal.我可以将它转换为字符串,但我想在JSON中使用数字类型.如果我尝试将其转换为float最终超过2位小数.

如果可能,需要发生什么才能获得如下结果?

{ 'sum': 500.50 }
Run Code Online (Sandbox Code Playgroud)

python django

9
推荐指数
1
解决办法
1万
查看次数