【发布时间】:2020-07-28 12:13:39
【问题描述】:
我发出了一个 http 请求以从表中提取一列数据。在提取此数据后,我在尝试迭代对象内部的对象数组时遇到问题。我尝试使用Array.from() 和split() 将对象转换为数组,但这会返回对象内的每个字符,并用空格分隔。如何遍历主对象内的这个对象数组以获取每个名为“value”的键字段的值?
这是我根据请求提取的对象:
0: "{"
data ":[{"
8 ":{"
value ":"
644 Lucon Road Back Warehouse, Schwenksville, North Dakota 58963 "}},{"
8 ":{"
value ":"
5689 Henkels Lane Suite 504, Annapolis Junction, New Jersey 58963 "}},{"
8 ":{"
value ":"
2563 Dickerson Pike Suite 105, Nashville, North Dakota 58963 "}},{"
8 ":{"
value ":"
123 Country Lane, Prosperity, North Dakota 58963 "}},{"
8 ":{"
value ":"
896 Cember Way Suite A, Summerville, North Carolina 58963 "}},{"
8 ":{"
value ":"
1125 NW 97 th Avenue, Doral, Texas 58963 "}},{"
8 ":{"
value ":"
896 Hill Avenue Suite C, Toledo, Alabama 58963 "}},{"
8 ":{"
value ":"
2101 Pleasant Valley Lane Suite B, Arlington, Texas 58963 "}},{"
8 ":{"
value ":"
1000 S Marietta Parkway SE Suite 105, Marietta, Timbuktu 35896 "}},{"
8 ":{"
value ":"
1258 103 rd Street Suite 127, Jacksonville, Texas 35896 "}},{"
8 ":{"
value ":"
9856 Corporate Drive North Suite 201, Mobile, Maryland 58963 "}},{"
8 ":{"
value ":"
9563 Leah Drive Unit 1, Hillsborough, North Dakota 25896 "}},{"
8 ":{"
value ":"
5689 Brookshire Road Unit D, Greer, North Dakota 58963 "}},{"
8 ":{"
value ":"
1587 Kessler Avenue Suite 301, Schulenburg, Arizona 58963 "}},{"
8 ":{"
value ":"
fields ":[{"
id ":8,"
label ":"
Address ","
type ":"
address "}],"
metadata ":{"
numFields ":1,"
numRecords ":15,"
skip ":0,"
totalRecords ":15}}"
这是我的要求:
const headers = {
'QB-Realm-Hostname': 'xxxxx.quickbase.com',
'Authorization': 'QB-USER-TOKEN xxxxxxxxxxxxxxxxxxxxxxxxxxx',
'Content-Type': 'application/json'
}
const body = {
"from": "bn6rb5ll9",
"select": [8],
"options": {
"skip": 0,
"top": 0
}
}
const xmlHttp = new XMLHttpRequest();
xmlHttp.open('POST', 'https://api.quickbase.com/v1/records/query', true);
for (const key in headers) {
xmlHttp.setRequestHeader(key, headers[key]);
}
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState === XMLHttpRequest.DONE) {
let jsonObject = xmlHttp.responseText.split();
console.log(jsonObject);
// for (let i = 0; i <= jsonObject.length; i++) {
// console.log((jsonObject[i]));
// }
// const propValues = Object.values(xmlHttp.responseText);
// console.log(propValues);
}
};
xmlHttp.send(JSON.stringify(body));
这是我使用Array.from(xmlHttpResponseText)时得到的回复
(1242) ["{", """, "d", "a", "t", "a", """, ":", "[", "{", """, "8", """, ":", "{", """, "v", "a", "l", "u", "e", """, ":", """, "2", "0", "3", "3", " ", "L", "u", "c", "o", "n", " ", "R", "o", "a", "d", " ", "B", "a", "c", "k", " ", "W", "a", "r", "e", "h", "o", "u", "s", "e", ",", " ", "S", "c", "h", "w", "e", "n", "k", "s", "v", "i", "l", "l", "e", ",", " ", "P", "e", "n", "n", "s", "y", "l", "v", "a", "n", "i", "a", " ", "1", "9", "4", "7", "3", """, "}", "}", ",", "{", """, "8", """, ":", "{", """, …]
我使用了 JSON.parse(xmlHttp.responseText) 并且确实设法获得了 typeof 数组,但我没有看到任何可用于该数组的数组方法。
【问题讨论】:
-
这不是一个有效的对象表示。
-
请发布可编译的数据。目前,它不可读
-
split()或Array.from绝对是错误的。当响应是 JSON 字符串时,您应该改为JSON.parse(xmlHttp.responseText),但您在顶部的对象表示无效,......所以澄清一下。 -
如果这是您的响应,那么您对该 API 的响应是错误的。
标签: javascript arrays json object