相关疑难解决方法(0)

十进制到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万
查看次数

Django如何将Decimal对象传递给json

我有一个包含Decimal对象的查询集.我想将这些数据传递给json转储行:

ql = Product.objects.values_list('length', 'width').get(id=product_id)
data = simplejson.dumps(ql)

TypeError: Decimal('62.20') is not JSON serializable
Run Code Online (Sandbox Code Playgroud)

我应该如何将这些值传递给json.当然我可以将值转换为字符串 - 但我猜这不是一个好的解决方案.

任何帮助非常感谢.

django json

8
推荐指数
1
解决办法
6405
查看次数

创建自定义JSONEncoder

我正在运行Python 2.7,我正在尝试创建一个JSONEncoder的自定义FloatEncoder子类.我跟着很多例子,如,但似乎没有工作.这是我的FloatEncoder类:

class FloatEncoder(JSONEncoder):
    def _iterencode(self, obj, markers=None):
         if isinstance(obj, float):
            return (str(obj) for obj in [obj])
        return super(FloatEncoder, self)._iterencode(obj, markers)
Run Code Online (Sandbox Code Playgroud)

这里是我调用json.dumps的地方:

with patch("utils.fileio.FloatEncoder") as float_patch:
        for val,res in ((.00123456,'0.0012'),(.00009,'0.0001'),(0.99999,'1.0000'),({'hello':1.00001,'world':[True,1.00009]},'{"world": [true, 1.0001], "hello": 1.0000}')): 
            untrusted = dumps(val, cls=FloatEncoder)
            self.assertTrue(float_patch._iterencode.called)
            self.assertEqual(untrusted, res)
Run Code Online (Sandbox Code Playgroud)

第一个断言失败,意味着_iterencode没有被执行.在阅读JSON文档之后,我尝试重写default()方法,但也没有被调用.

python json

7
推荐指数
1
解决办法
4881
查看次数

JSON:TypeError:Decimal('34 .3')不是JSON可序列化的

我正在运行一个SQL查询,它返回一个Decimal列表.当我尝试将其转换为JSON时,我得到类型错误.

查询:

res = db.execute("""
SELECT CAST ((SUM(r.SalesVolume)/1000.0) AS decimal(6,1))
FROM RawData r
INNER JOIN Product p
ON r.ProductId = p.ProductId 
INNER JOIN Calendar c
ON r.DayId = c.DayId
WHERE c.WeekCodeInYear BETWEEN 1 AND 12
AND 
c.YearId = 2014
GROUP BY c.WeekCodeInYear """)
Run Code Online (Sandbox Code Playgroud)

结果清单:

[Decimal('34.3'), Decimal('50.9'), Decimal('31.5'), Decimal('23.3'), Decimal('19
.7'), Decimal('56.9'), Decimal('43.8'), Decimal('35.2'), Decimal('29.2'), Decima
l('43.7'), Decimal('42.6'), Decimal('23.4')]
Run Code Online (Sandbox Code Playgroud)

码:

for row in res:
    testlist.append (row[0])
    print testlist

list = json.dumps(testlist)
Run Code Online (Sandbox Code Playgroud)

而且我在Unable to serialize error 网上查找了Tried,没有多大帮助.请注意,最终列表将作为输入数据输入图表.

python json

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

包含小数的 Python dict 转换为 JSON

可能的重复:
Python JSON 序列化 Decimal 对象

任务:将包含混合数据类型(整数/字符串/小数/...)作为值的字典转换为 JSON 数组。

我知道如何将 python 字典转换为 JSON:

D = {key1:val1, key2,val2}
import json
jD = json.dumps(D)
Run Code Online (Sandbox Code Playgroud)

我还知道十进制值必须转换为字符串,否则 python 会抛出“十进制不是 json 可序列化”的错误。

所以我需要遍历字典来查找数据类型。

for key in D.keys():
    if type(key) == '<class "decimal.Decimal">': ## this is erroneous. pl. suggest correction
    D[key] = str(D[key])
Run Code Online (Sandbox Code Playgroud)

但这种编程涉及手工编码和硬编码。

如果我得到嵌套字典结构,则再次需要硬编码(这是错误的)。

是否有其他方法/技巧可以从 dict 中的任何数据类型获取 JSON 数组?

python json

5
推荐指数
1
解决办法
5593
查看次数

Flask-Restless从Flask-Sqlalchemy转储十进制值

我有使用Flask-SQLAlchemy的此模型:

class Menu(Document, db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(80), unique=True, index=True)
    price = db.Column(db.Numeric)
Run Code Online (Sandbox Code Playgroud)

我可以使用Flask-Restless为此模型创建api。问题是当我从api URL进行HTTP GET时:

  File "/usr/lib/python2.6/json/encoder.py", line 344, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: Decimal('10000.0000000000') is not JSON serializable
Run Code Online (Sandbox Code Playgroud)

问题很明显,JSON编码器无法编码映射到价格(数字列类型)的十进制值。是否有任何使用自定义JSON编码器启用Flask-Restless的解决方法?

python json flask flask-sqlalchemy

5
推荐指数
1
解决办法
2720
查看次数

django DecimalField - 如何将值检索为浮点数?

因此,DecimalField如果我知道将我的模型数据序列化为 JSON 有多么困难,我永远不会使用 Django 的选项。

长话短说,我如何从 a 获取浮点值DecimalField

我的模型看起来像这样:

class DailyReport(models.Model):
    earnings = models.DecimalField(max_digits=12, decimal_places=4)

    def earnings_float(self):
        return self.earnings.to_float()
Run Code Online (Sandbox Code Playgroud)

显然没有to_float()可用的方法,那么我该怎么办?

以下是后来的补充:

这有效:

class DailyReport(models.Model):
    earnings = models.DecimalField(max_digits=12, decimal_places=4)

    def earnings_float(self):
        return float(self.earnings)
Run Code Online (Sandbox Code Playgroud)

但这似乎也太复杂了。我正在尝试将 django-rest-framework 用于所有序列化,因为我通常将它用于我的应用程序中的 rest-framework 内容。在这种特殊情况下,我只想将我的数据转换和序列化为 python 列表和字典,然后通过 pymongo 3 将它们作为文档存储在 Mongo DB 中。

django django-models

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

使用Django将数据传递到Google Charts

这个问题已经被问,但没有回答这样一个.

在我的view.py数据中从MySQL中提取数据,例如:

(Decimal('13'), Decimal('6'), Decimal('13'))
(Decimal('207'), Decimal('18'), Decimal('129'))
(Decimal('301'), Decimal('38'), Decimal('193'))
(Decimal('204'), Decimal('32'), Decimal('150'))
(Decimal('159'), Decimal('25'), Decimal('88'))

args = {'array':array}
return render_to_response('page2.html', args)
Run Code Online (Sandbox Code Playgroud)

试图把它放入谷歌图表

function drawChart() {
    var djangoData = JSON.parse('{{ args }}');
    var data = google.visualization.arrayToDataTable(djangoData);
Run Code Online (Sandbox Code Playgroud)

也试过var djangoData = {{ array }}; 两个没有运气!

EDIT1

建议

return render_to_response('page2.html', {'array': json.dumps(array)})
Run Code Online (Sandbox Code Playgroud)

看起来它会起作用,除了db产生不兼容的类型.有没有办法在不将每个项目转换为int类型的情况下执行此操作.或者,如果有一种pythonic方式转换它?

编辑 - 解决方案

使用选定的答案并添加|safe到数组,所以{{array|safe}}

python mysql django

3
推荐指数
1
解决办法
3943
查看次数

json 编码器 json.dump 和 json.dumps 的不同结果

我有一个这种格式的字符串,

d = {'details': {'hawk_branch': {'tandem': ['4210bnd72']}, 'uclif_branch': {'tandem': ['e2nc712nma89', '23s24212', '12338cm82']}}}
Run Code Online (Sandbox Code Playgroud)

我想以这种格式将它写入文件,将列表转换为字典并value为列表中的每个值添加单词作为键,所以{'tandem': ['4210bnd72']}应该成为

  "tandem": {
    "value": "4210bnd72"
  }
Run Code Online (Sandbox Code Playgroud)

这是预期的输出文件,

{
  "details": {

    "hawk_branch": {
      "tandem": {
        "value": "4210bnd72"
      }
    },
    "uclif_branch": {
      "tandem": {
        "value": "e2nc712nma89",
        "value": "23s24212",
        "value": "12338cm82",
      }
    }
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里问了一个问题,有人回答使用json.JSONEncoder

class restore_value(json.JSONEncoder):
    def encode(self, o):
        if isinstance(o, dict):
            return '{%s}' % ', '.join(': '.join((json.encoder.py_encode_basestring(k), self.encode(v))) for k, v in o.items())
        if isinstance(o, list):
            return '{%s}' % …
Run Code Online (Sandbox Code Playgroud)

python json python-3.x

3
推荐指数
1
解决办法
2338
查看次数

TypeError:Decimal 类型的对象不可 JSON 序列化

TypeError: Object of type Decimal is not JSON serializable


当我运行时,postman api我收到上述错误,因为sales_qty是十进制,我不知道如何decimalfor循环中解析并将其作为 json 返回

from flask import Flask, jsonify

import decimal,json

result= [('V_M_001', 'KITE', 'Napkin', 1, 2, 12, 0, Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0')), 
        ('V_M_001', 'KITE', 'Napkin', 2, 4, 34, 5, Decimal('1'), Decimal('4'), Decimal('0'), Decimal('0'))]
        
def fun():

   for i in result:
        data_all.append({
                            "machine_name":i.machine_name,
                            "location":i.location, 
                            "item_name":i.item_name,
                            "row_no":i.row_no,
                            "require_minimum_stk_qty":i.require_minimum_stk_qty,
                            "capacity":i.capacity,
                            "stock_qty":i.stock_qty,
                            "sales_qty":i.sales_qty,
                            "available_qty":i.available_qty,
                            "sales_day_qty":i.sales_day_qty,
                            "sales_week_qty":i.sales_week_qty
        
        })
        
    return jsonify(data_all)

fun()
Run Code Online (Sandbox Code Playgroud)

输出: TypeError: Object of type Decimal is …

python json decimal flask-sqlalchemy flask-restful

2
推荐指数
1
解决办法
9006
查看次数