Stringify JSON key of --json option result (#10046)

About RESP3 an ordered collection of key-value pairs, keys and value can
be any other RESP3 type, but a key should be string in JSON spec.
This commit is contained in:
Yuta Hongo 2022-01-05 00:24:29 +09:00 committed by GitHub
parent 65a7635793
commit 8deb9a4f1e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1192,8 +1192,18 @@ static sds cliFormatReplyJson(sds out, redisReply *r) {
case REDIS_REPLY_MAP:
out = sdscat(out,"{");
for (i = 0; i < r->elements; i += 2) {
out = cliFormatReplyJson(out, r->element[i]);
redisReply *key = r->element[i];
if (key->type == REDIS_REPLY_STATUS ||
key->type == REDIS_REPLY_STRING ||
key->type == REDIS_REPLY_VERB) {
out = cliFormatReplyJson(out, key);
} else {
/* According to JSON spec, JSON map keys must be strings, */
/* and in RESP3, they can be other types. */
sds tmp = cliFormatReplyJson(sdsempty(), key);
out = sdscatrepr(out,tmp,sdslen(tmp));
sdsfree(tmp);
}
out = sdscat(out,":");
out = cliFormatReplyJson(out, r->element[i+1]);