如何检查json中的值是节点js中的字符串或数组

时间:2016-02-12 10:43:47

标签: javascript json node.js object

我在节点js中有一个像这样的数组Json。

JSON 1

var json1= {
  bookmarkname: 'My Health Circles',
  bookmarkurl: 'http://localhost:3000/',
  bookmark_system_category: [ '22', '1' ]
}

JSON 2

var json2 = {
  bookmarkname: 'My Health Circles',
  bookmarkurl: 'http://localhost:3000/',
  bookmark_system_category:'22'
}

我试过了:

var length1=json1.bookmark_system_category.length;

var length1=json2.bookmark_system_category.length;

预期产出:

l1=2;
l2=1;

2 个答案:

答案 0 :(得分:2)

  

length属于string以及array

在第二种情况下,它会计算string的长度 2

可能你需要一个条件:

var json1 = {
  bookmarkname: 'My Health Circles',
  bookmarkurl: 'http://localhost:3000/',
  bookmark_system_category: ['22', '1']
};
var json2 = {
  bookmarkname: 'My Health Circles',
  bookmarkurl: 'http://localhost:3000/',
  bookmark_system_category: '22'
};

var getLength = function(input) {
  if (typeof input === 'string') {
    return 'Is String';
  } else {
    return input.length;
  }
}

var length1 = getLength(json1.bookmark_system_category);
var length2 = getLength(json2.bookmark_system_category);
alert(length1);
alert(length2)

答案 1 :(得分:0)

您可以使用Array.isArray

Array.isArray(json1.bookmark_system_category); // true

但是对于不是数组的所有内容,这将返回false - 字符串,对象,null

这是一个漂亮的函数,它将返回一个你可以测试的对象类型(小写):

function toType(x) {
  return ({}).toString.call(x).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
}

toType({}) // object
toType([]) // array
toType(null) // null
toType(0) // number
toType('bob') // string

所以:

toType(json1.bookmark_system_category) // array
toType(json2.bookmark_system_category) // string