Сделать объект Cassandra JSON сериализуемым - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть метод для получения всех моих данных из базы данных кассандры. Проблема, с которой я сталкиваюсь, заключается в том, что он возвращает объект cassandra, а мне нужен json. Я пробовал несколько решений, но ни одно из них не работает. Я пробовал json.dumps() и loads, но я получаю сообщение об ошибке, говорящее object is not JSON serializable

Есть предложения?

Мой код:

@api.route('/getAllApps')
class getAllApps(Resource):
    @api.marshal_list_with(model)
    def get(self):
        return ar.getAllApplications(), 200
        #if ar.getAllApplications is None:
            #return 204



def getAllApplications(*args):
        for data in AddApplication.objects():
             print(data, data.address, data.gocd, data.jenkins, data.nodes, data.serverDependencies)
             return data

1 Ответ

1 голос
/ 08 апреля 2019

В соответствии с настройками по умолчанию, cassandra возвращает данные запроса в формате кортежа. Что вам нужно сделать, это изменить конфигурацию кассандры, чтобы получить ее в формате dict.

import json
from cassandra.query import ordered_dict_factory

cluster = Cluster(['127.0.0.1'],auth_provider=auth_provider)
session = cluster.connect("keyspace")
session.row_factory = ordered_dict_factory

#query result
rows = self.session.execute_async("SELECT * FROM " + table)
rows = self.return_result(rows, 'data')
data = rows.result()

# dump in json
json.dumps(data)

Вот другой способ, проверьте поддержку select-json :

 SELECT JSON a, ttl(b) FROM ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...