skip to Main Content

Lua script converts empty array as an object. How to avoid conversion.

test.lua

local json_str = '{"items":[],"properties":{}}'
return cjson.encode(cjson.decode(json_str))

Output

redis-cli --eval test.lua

“{“items”:{},”properties”:{}}”

items are an array [] but the output is an object {}

2

Answers


  1. The main difference between JSON object definition and lua table, that lua table has no type array.

    Empty JSON array [] or object {} is converted to lua table {}, but empty lua table {} can be converted to array [] or object {}.

    To my knowledge, cjson for redis has no solution for this problem at the moment, possible solution is mentioned in Redis Lua Differetiating empty array and object. (I can’t argue if it works)

    Login or Signup to reply.
  2. According to this great post you can set the following option to cjson:

    cjson.encode_empty_table_as_object(false)
    

    So cjson.encode({dogs = {}}) resolves to {"dogs": []}

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search