将嵌套对象中所有可能的字符串值映射到数组中,因为求和键和结构未知

mapping all possible string value from nested object into an array asumming key and structure is unknown

你好,

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

请注意,来自一个用户的一次调用将与另一个用户获得不同的结果..例如..:[=​​14=]

曾几何时,用户使用 linkedin 注册我的应用程序,在我获得访问令牌后,我调用 linkedin api 并获得此 json 结果:

{
  "firstName": "First Name 1",
  "headline": "Headline 1",
  "id": "MMk56SU",
  "industry": "Education",
  "lastName": "Last Name 1",
  "pictureUrl": "https://media.licdn.com/mpr/mprx/0_0FVMABigi5VY-wfOsimN0hTy6qn0-om7KFGcqGuy8qWY-Vj7JAG4shGykPWCAejmJAhBJ5Dp7_VOlmK7KN05J_8ro_VxlaMCzN0s-Cvj3Cf1U4COMLWqt9U2E9h74aaPycUvvK",
  "positions": {
    "_total": 1,
    "values": [{
      "company": {"name": "My Lovely College"},
      "id": 5960817,
      "isCurrent": true,
      "title": "Student"
    }]
  }
}

问题是:如何将 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"
]

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

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

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

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

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

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

我只需要检索字符串值,所以应该排除数字和布尔值,

欢迎来自 vanilla js 或 lodash 或 underscore 或 jquery 的解决方案...

非常感谢你,

我同意@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 中的对象,所以它们将由 [=12] 处理=] 与普通对象一起块。