在下面的
const fetchData = async () => {
try {
const response = await fetch("faulty-endpoint");
const data = await response.text()
console.log('data', data)
} catch (error) {
console.error(error)
} finally {
setLoading(false)
}
}
如何將 response.text() 資料轉回 json?我做不到
const data = await response.json()
因為那時我console.log什么都沒有。我希望它是JSON格式化的,所以我可以將它保存到一個我可以跨越的useState陣列中。map
uj5u.com熱心網友回復:
由于尾隨逗號,您可以先將其洗掉,然后使用JSON.parse:
let text = await response.text();
// if trailing comma present, remove last character by slicing it off
// -1 in slice is the same as text.length - 1
if (text.endsWith(",")) text = text.slice(0, -1);
const data = JSON.parse(text);
然而,這不是最好或最干凈的解決方案;理想情況下,API 應該回傳有效的 JSON...
uj5u.com熱心網友回復:
這是youdateme的 answer的作業概念驗證實作。
我在這里偽造請求以避免 CORS 問題等,但回應是從您問題中的端點復制的。
(注意:我必須在匯出的模板字串的最后一條記錄中重新轉義引號\"Hello World\"。)
它按照 youdateme 的建議進行,并且有效。
const fetchData = async () => {
try {
const response = await fakeRequest();
const data = JSON.parse(response.replace(/,$/, ""));
setData(data);
} catch (error) {
console.error(error);
}
};
fetchData();
如果這解決了您的問題,您應該接受 youdateme 的回答。
uj5u.com熱心網友回復:
JSON 和 JavaScript 物件看起來很相似,但它們是不同的。JSON 只是一個格式化為 JavaScript 物件的字串。請參閱:使用 JSON - MDN
要進行映射,您需要它是一個 JavaScript 物件,而不是 JSON。
用于JSON.parse(yourResponse)將 JSON 字串決議為 JavaScript 物件(或陣列等)。請參閱:來自 MDN 的 JSON.parse
要將 JavaScript 物件轉換為 JSON 字串,您可以使用JSON.stringify(yourObject)
uj5u.com熱心網友回復:
嘗試這個JSON.parse(responseData)
const fetchData = async () => {
try {
const response = await fetch("http://front-assignment.codeit.team/");
const data = await response.text()
console.log('data', JSON.parse(data));
} catch (error) {
console.error(error)
} finally {
setLoading(false)
}
}
其他解決方案:
fetch('targetedURL')
.then(response => response.json())
.then(data => console.log(data));
uj5u.com熱心網友回復:
問題似乎出在 api 回傳的回應的格式上。api 在陣列的末尾回傳一個尾隨的“,”,這使其成為無效的 JSON 物件。從回應中洗掉“,”,然后
常量資料 = 等待 response.json()
應該管用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/427819.html
標籤:javascript 反应 异步等待
上一篇:Javascript函陣列合
