mirror of
https://github.com/neovim/neovim.git
synced 2025-12-15 19:05:40 +00:00
fix(json): allow objects with empty keys #25564
Problem: Empty string is a valid JSON key, but json_decode() treats an object with empty key as ":help msgpack-special-dict". #20757 :echo json_decode('{"": "1"}') {'_TYPE': [], '_VAL': [['', '1']]} Note: vim returns `{'': '1'}`. Solution: Allow empty string as an object key. Note that we still (currently) disallow empty keys in object_to_vim() (since7c01d5ff92):f64e4b43e1/src/nvim/api/private/converter.c (L333-L334)Fix #20757 Co-authored-by: Justin M. Keyes <justinkz@gmail.com>
This commit is contained in:
@@ -101,6 +101,8 @@ describe('vim.json.decode()', function()
|
||||
eq({['1']=2}, exec_lua([[return vim.json.decode('{"1": 2}')]]))
|
||||
eq({['1']=2, ['3']={{['4']={['5']={{}, 1}}}}},
|
||||
exec_lua([[return vim.json.decode('{"1": 2, "3": [{"4": {"5": [ [], 1]}}]}')]]))
|
||||
-- Empty string is a valid key. #20757
|
||||
eq({['']=42}, exec_lua([[return vim.json.decode('{"": 42}')]]))
|
||||
end)
|
||||
|
||||
it('parses strings properly', function()
|
||||
@@ -161,6 +163,8 @@ describe('vim.json.encode()', function()
|
||||
it('dumps dictionaries', function()
|
||||
eq('{}', exec_lua([[return vim.json.encode(vim.empty_dict())]]))
|
||||
eq('{"d":[]}', exec_lua([[return vim.json.encode({d={}})]]))
|
||||
-- Empty string is a valid key. #20757
|
||||
eq('{"":42}', exec_lua([[return vim.json.encode({['']=42})]]))
|
||||
end)
|
||||
|
||||
it('dumps vim.NIL', function()
|
||||
|
||||
Reference in New Issue
Block a user