5

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
  • This was asked here: stackoverflow.com/q/43272872/12918181 Commented Feb 25, 2020 at 16:54
  • In the above question, I am not able to find relation between emptyArray() and toJsonStr() function . Can you help me to modify second approach Fix by code an above answer. Commented Feb 25, 2020 at 17:43

3 Answers 3

3

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)

Sign up to request clarification or add additional context in comments.

Comments

3

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": []}

Comments

0

This worked for me: setmetatable(table, cjson.array_mt)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.