Javascript 将数组转换为json对象
我有一个这样的数组Javascript 将数组转换为json对象,javascript,json,Javascript,Json,我有一个这样的数组 [ 'quality', 'print-quality: 4', 'x-dimension', 'Value: 21590', 'Value: y-dimension', 'Value: 27940', 'Value: ', 'Value: media-bottom-margin', 'Value: 0', 'Value: media-left-margin', 'Value: 0', 'Value: media-right-mar
[ 'quality',
'print-quality: 4',
'x-dimension',
'Value: 21590',
'Value: y-dimension',
'Value: 27940',
'Value: ',
'Value: media-bottom-margin',
'Value: 0',
'Value: media-left-margin',
'Value: 0',
'Value: media-right-margin',
'Value: 0',
'Value: media-top-margin',
'Value: 0',
'Value: ' ]
我正在尝试将此数组转换为以下格式的json
{ "quality": "print-quality: 4",
"x-dimension": "21590",
"y-dimension": "27940",
"media-bottom-margin": "0",
"media-left-margin" : "0",
"media-right-margin": "0",
"media-top-margin" : "0"
}
我需要删除所有的“Value”字符串,以及如何以上述格式获取它您不能创建这样的关联数组,因为JavaScript没有关联数组。但是你可以创建一个对象,这正是你想要的 这里有一种方法:
var data = [ 'quality',
'print-quality: 4',
'x-dimension',
'Value: 21590',
'Value: y-dimension',
'Value: 27940',
'Value: ',
'Value: media-bottom-margin',
'Value: 0',
'Value: media-left-margin',
'Value: 0',
'Value: media-right-margin',
'Value: 0',
'Value: media-top-margin',
'Value: 0',
'Value: ' ],
cleanData,
newData = {}; // initialize the new object
cleanData = data
.map( function(x) { return x.replace(/^Value: /, ''); }) // remove leading "Value: "
.filter( function (x) { return !x.match(/^$/); } ); // strip empty values
for (i = 0; i < cleanData.length; i += 2) { // loop over the cleaned-up array
newData[cleanData[i]] = cleanData[i + 1];
}
您不能创建这样的关联数组,因为JavaScript没有关联数组。但是你可以创建一个对象,这正是你想要的 这里有一种方法:
var data = [ 'quality',
'print-quality: 4',
'x-dimension',
'Value: 21590',
'Value: y-dimension',
'Value: 27940',
'Value: ',
'Value: media-bottom-margin',
'Value: 0',
'Value: media-left-margin',
'Value: 0',
'Value: media-right-margin',
'Value: 0',
'Value: media-top-margin',
'Value: 0',
'Value: ' ],
cleanData,
newData = {}; // initialize the new object
cleanData = data
.map( function(x) { return x.replace(/^Value: /, ''); }) // remove leading "Value: "
.filter( function (x) { return !x.match(/^$/); } ); // strip empty values
for (i = 0; i < cleanData.length; i += 2) { // loop over the cleaned-up array
newData[cleanData[i]] = cleanData[i + 1];
}
你只是忽略了'Value:'elemets吗?没有输入完整的值..我需要像'0'这样的整数部分不需要字符串'Value:'那么这样做有什么问题?@SantiagoHernández也引用了你只是忽略了'Value:'elemets吗?没有输入完整的值..我需要像'0'这样的整数部分不需要字符串'Value:'那么“这么做有什么问题吗?”圣地亚哥·厄南德斯还引用了一句富有创造性的话,我喜欢,谁知道谁投了反对票,但这里是+1sir@Santiago埃尔南德斯:“很有创意”——你会怎么做呢?这是一个幼稚的实现。正如Ed Cottrell所说的“这里有一种方法”有很多方法可以使用本机javascript代码来实现,如果你问我使用regex;)的另一种方法,玩得开心@zerkms@SantiagoHernández和它基本上是一样的-你只需要使用
forEach
而不是for
@zerkms好吧,那么你就是:var json={};data.toString().replace(/Value:/gi,“”).replace(/,$/,”).split(“,”).forEach(函数(el,i,a){if(i%2==0)json[el]=a[i+1];})代码>这样就可以了。我没有使用map
或filter
:)晚安,这很有创意,我喜欢,谁知道谁投了反对票,但这里是+1sir@Santiago埃尔南德斯:“很有创意”——你会怎么做呢?这是一个幼稚的实现。正如Ed Cottrell所说的“这里有一种方法”有很多方法可以使用本机javascript代码来实现,如果你问我使用regex;)的另一种方法,玩得开心@zerkms@SantiagoHernández和它基本上是一样的-你只需要使用forEach
而不是for
@zerkms好吧,那么你就是:var json={};data.toString().replace(/Value:/gi,“”).replace(/,$/,”).split(“,”).forEach(函数(el,i,a){if(i%2==0)json[el]=a[i+1];})代码>这样就可以了。我没有使用map
或filter
:)晚安