在JSON中将数字映射到文本时,最佳做法是什么? JavaScript map是完美的,因为我可以使用数字作为键,我不能用对象做:
let map = new Map();
map.set(1, 'describe 1');
map.set(2, 'describe 2');
......等等。但是据我所知,你不能在json中使用地图。最好的选择真的只是使用一组数组吗?
[
[ 1, 'describe 1' ],
[ 2, 'describe 2' ]
]
答案 0 :(得分:4)
JSON代表“JavaScript Object Notation”,是Javascript的子集 - 特别是用于写出对象的子集。您正在键入的地图会创建一个对象。 map.set
函数输出的那个对象就是你所得到的。你可以通过这样做来看到它。
let map = new Map();
map.set(1, 'describe 1');
map.set(2, 'describe 2');
console.log(JSON.stringify(map));
我认为你希望你的数字是字符串,在这种情况下你可以这样做:
let map = new Map();
map.set('1', 'describe 1');
map.set('2', 'describe 2');
但是,如果您的数字用于标识数组上项目的索引,那么您可能会这样做:
[null, 'describe 1', 'describe 2']
无论哪种方式,您都可以使用JSON.stringify
有关更多证据,以下是Chrome输入的输出内容:
> let map = new Map();
undefined
> map.set(1, 'describe 1');
Map {1 => "describe 1"}
> map.set(2, 'describe 1');
Map {1 => "describe 1", 2 => "describe 1"}
看起来像是:
{ 1: 'describe 1', 2: 'describe 2' }
作为Javascript对象(即JSON)
有关JSON的更多信息,请查看http://www.json.org/
答案 1 :(得分:3)
您可以使用字符串值“1”,“2”等作为JSON文件中的键,然后如果要获取数字值,则在其上调用parseInt
。然后,您可以编写一个将导入的JSON文件转换为Map的函数。像
function JSONtoMap(src){
var m = new Map();
for(var key in src)
m.set(parseInt(key), src[key])
return m;
}
答案 2 :(得分:1)
有几种方法可以在JSON中使用。
使用带有转换为字符串的数字的对象作为键(如Weston所描述的那样):{'1':'describe 1', '2': 'describe 2'}
或将文字作为键的对象:{'describe 1':1, 'describe 2':2}
或创建一个数组,使索引与数组中该位置的文本配对的数字匹配:[,'describe 1', 'describe 2']