Упростите ответ Couchdb JSON - PullRequest
       5

Упростите ответ Couchdb JSON

14 голосов
/ 09 февраля 2011

Я храню данные о местоположении в Couchdb и ищу способ получить массив только значений вместо key: value для каждой записи.Например:

Текущий ответ

{"total rows": 250, "offset": 0, "rows":[
    {"id": "ec5de6de2cf7bcac9a2a2a76de5738e4", "key": "user1", "value": {"city": "San Francisco", "address":"1001 Bayhill Dr"},
    {"id": "ec5de6de2cf7bcac9a2a2a76de573ae4","key": "user1", "value": {"city": "Palo Alto", "address":"583 Waverley St"}
    ... (etc).
]}

Мне действительно нужно только:

[{"city": "San Francisco", "address":"1001 Bayhill Dr"},
 {"city": "Palo Alto", "address":"583 Waverley St"},
 ...]

Причина всего этого заключается в минимизации количества пропускной способности, которое JSONответ потребляет.Я не могу найти способ превратить вид в простой массив.Есть предложения?

Спасибо.

1 Ответ

19 голосов
/ 09 февраля 2011

Вы можете использовать функции _show и _list , они принимают документ или представление (соответственно) и могут отправлять преобразованный ответ в любом формате, который вам нужен. (в данном случае JSON)

Обновление: Я провел простой тест с данными, которые вы предоставили здесь, на моей собственной CouchDB. Вот функция списка, которую я в итоге написал. Настройте его под свои нужды. :)

function (head, req) {
    // specify that we're providing a JSON response
    provides('json', function() {
        // create an array for our result set
        var results = [];

        while (row = getRow()) {
            results.push({
                city: row.value.city,
                address: row.value.address
            });
        }

        // make sure to stringify the results :)
        send(JSON.stringify(results));
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...