将所有可能的字符串值从嵌套对象映射到数组asumming键和结构是未知的

时间:2015-12-25 07:33:56

标签: javascript jquery json underscore.js lodash

helloo ,,

我尝试从使用linkedin注册的用户检索所有可能的字符串值。结果是json格式,,,

请注意,来自一个用户的一个呼叫将与另一个用户获得不同的结果...例如..:

一旦未来的时间,,,用户使用linkedin注册我的应用程序,在我获得访问令牌后,我打电话给linkedin api并获得此json结果:

[
"First Name 1","Headline 1","MMk56SU","Education","Last Name 1","https://media.licdn.com/mpr/mprx/0_0FVMABigi5VY-wfOsimN0hTy6qn0-om7KFGcqGuy8qWY-Vj7JAG4shGykPWCAejmJAhBJ5Dp7_VOlmK7KN05J_8ro_VxlaMCzN0s-Cvj3Cf1U4COMLWqt9U2E9h74aaPycUvvK","My Lovely College","Student"
]

问题是:如何将json转换为仅包含如下值的字符串数组:

{
  "firstName": "First name 2",
  "headline": "Headline 2",
  "id": "DsadDSsa",
  "industry": "Education",
  "lastName": "Last Name 2",
  "location": {"name": "Some Country"},
  "summary": "my summary"
}

之后,其他用户注册,,,我再次打电话,,,然后我得到这个结果

[
"First name 2","Headline 2","DsadDSsa","Education","Last Name 2","Some Country","my summary"
]

问题是:如何将json转换为仅包含如下值的字符串数组:

{{1}}

之后,其他用户注册,,,等等,

一个用户与另一个用户的json结果的关键和结构会有所不同,,,所以最好假设密钥和结构未知

我只需要检索字符串值,,,因此应排除数字和布尔值,,,

欢迎来自vanilla js或lodash或下划线或jquery的解决方案...

非常感谢你,,,

1 个答案:

答案 0 :(得分:0)

我同意@ Xotic750,很高兴看到你自己尝试过的东西。但是,这是一个解决方案。它是一个递归函数,不需要像lodash这样的库。

function stringValues(obj) {
  var strings = [];

  Object.keys(obj).forEach(function (key) {
    var value = obj[key];

    if (typeof value === 'string') {
      strings.push(value);
    } else if (typeof value === 'object') {
      strings = strings.concat(stringValues(value));
    }
  });

  return strings;
}

幸运的是,我们甚至不需要为value是一个数组做一个特例,因为数组是JavaScript中的对象,所以它们将由else if块和平原一起处理对象。