将嵌套对象中所有可能的字符串值映射到数组中,因为求和键和结构未知
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] 处理=] 与普通对象一起块。
你好,
我正在尝试从使用 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] 处理=] 与普通对象一起块。