【问题标题】:How to create a JSON file from a NDB database using Python如何使用 Python 从 NDB 数据库创建 JSON 文件
【发布时间】:2014-05-21 13:04:52
【问题描述】:

我想从数据库中生成一个简单的 json 文件。

我不是使用 python、NDB 数据库引擎或 GQL 解析 json 文件的专家。

非常感谢您的帮助

使用 NDB 定义模型类:

# coding=UTF-8 
from google.appengine.ext import ndb
import logging

class Albums(ndb.Model):
    """Models an individual Event entry with content and date."""

    SingerName = ndb.StringProperty()
    albumName = ndb.StringProperty()

预期输出:

{
"Madonna": ["Madonna Album", "Like a Virgin", "True Blue", "Like a Prayer"],
"Lady Gaga": ["The Fame", "Born This Way"],
"Bruce Dickinson": ["Iron Maiden", "Killers", "The Number of the Beast", "Piece of Mind"]
} 

【问题讨论】:

  • 这是您需要做的。 1) 从数据存储中查询专辑实体 2) 迭代它们以形成您想要的数据结构(即,值是列表的 python 字典) 3) 使用 json.dumps() 方法解析为 JSON。
  • 嗨,Gwyn,感谢您提供的信息,但您有代码吗?我不习惯使用所有这些数据类型,比如字典。
  • 我可以很容易地提供代码,但这太容易了——我鼓励你先尝试一下!
  • 完成!使用列表和字典。不幸的是,这似乎不是快速和最佳的
  • Iirc ndb 模型有一个 to dict 方法....

标签: json google-app-engine python-2.7 app-engine-ndb


【解决方案1】:

为保持一致,模型名称应为单数(Album 而非 Albums),属性名称应为 lowercase_with_underscores:

class Album(ndb.Model):
    singer_name = ndb.StringProperty()
    album_name = ndb.StringProperty()

如您的问题所述生成 JSON:

1) 从数据存储中查询专辑实体:

albums = Album.query().fetch(100)

2) 对它们进行迭代以形成 python 数据结构:

albums_dict = {}
for album in albums:
    if not album.singer_name in albums_dict:
        albums_dict[album.singer_name] = []
    albums_dict[album.singer_name].append(album.album_name)

3) 使用 json.dumps() 方法编码为 JSON。

albums_json = json.dumps(albums_dict)

或者,您可以使用内置的 to_dict() 方法:

albums = Album.query().fetch(100)
albums_json = json.dumps([a.to_dict() for a in albums])

【讨论】:

    猜你喜欢
    • 2021-08-27
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 2019-12-23
    • 2023-03-15
    • 2016-09-27
    • 1970-01-01
    相关资源
    最近更新 更多