在前端解析JSON数据接口需要结合数据获取、解析、操作及渲染等多个步骤,以下是详细方法与最佳实践:
// 基础请求示例
fetch('https://api.example.com/data')
.then(response => {
if (!response.ok) throw new Error('网络响应失败');
return response.json(); // 自动解析JSON
})
.then(data => console.log(data))
.catch(error => console.error('错误:', error));
axios.get('https://api.example.com/data')
.then(response => {
console.log(response.data); // 直接获取解析后的对象
})
.catch(error => {
console.error('请求失败:', error);
});
const jsonString = '{"name": "John", "age": 30}';
try {
const obj = JSON.parse(jsonString);
console.log(obj.name); // 输出: John
} catch (error) {
console.error('解析失败:', error);
}
const data = {
user: {
address: { city: "北京" }
}
};
console.log(data.user.address.city); // 输出: 北京
const users = [
{ name: "张三", age: 25 },
{ name: "李四", age: 30 }
];
users.forEach(user => {
console.log(`${user.name} - ${user.age}岁`);
});
const container = document.getElementById('data-container');
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => {
data.forEach(item => {
const div = document.createElement('div');
div.textContent = `姓名: ${item.name}, 年龄: ${item.age}`;
container.appendChild(div);
});
});
<!-- HTML模板 -->
<script id="template" type="text/x-handlebars-template">
{{#each users}}
<p>{{name}} - {{age}}岁</p>
{{/each}}
</script>
const templateSource = document.getElementById('template').innerHTML;
const template = Handlebars.compile(templateSource);
const html = template({ users: data });
document.getElementById('container').innerHTML = html;
fetch('https://api.example.com/data')
.then(response => {
if (!response.ok) throw new Error(`HTTP错误: ${response.status}`);
return response.json();
})
.then(data => console.log(data))
.catch(error => {
console.error('请求失败:', error);
// 显示用户友好提示
showErrorToast(error.message);
});
const [loading, setLoading] = useState(true);
useEffect(() => {
fetch('/api/data')
.then(res => res.json())
.then(data => {
setData(data);
setLoading(false);
});
}, []);
// 渲染时根据loading状态显示骨架屏或进度条