我将如何读取嵌套在文件内部的深度JSON数据?我尝试了不同的方法,但似乎无法正常工作。
<template>
<div>
<div v-for="edu in info" :key="edu">
<div>{{ edu.section.title }}</div> // this is what im trying to get to work
</div>
<div class="card container">
{{ info }}
</div>
</div>
</template>
<script>
import axios from 'axios';
export default {
data() {
return {
info: null
}
},
mounted() {
axios
.get('./calculus.json') // Data Below
.then(response => (this.info = response.data.edu))
.catch(error => console.log(error))
}
}
</script>
我的JSON看起来像这样:
{
"edu": {
"1": {
"title": "Title One",
"subtitle": "Subtitle One",
"description": "Description One",
"section": {
"1": {
"title": "Section One Title",
"content": "Section One Content"
}
}
},
"2": {
"title": "Title Two",
"subtitle": "Subtitle Two",
"description": "Description Two",
"section": {
"1": {
"title": "Section One Title",
"content": "Section One Content"
}
}
}
}
}
如何使用vue-for并在部分中获取数据以使其显示在标题下?例如:title,section> title,section> subtitle等。
答案 0 :(得分:1)
一种深入浏览对象的方法是在对象(和子对象)条目上累积v-for。
即:
<div v-for="([category, books], catkey) in Object.entries(info)" :key="`category-${catkey}`">
<div>{{ category }} :</div>
<div v-for="([num, book], numkey) in Object.entries(books)" :key=`book-${catkey}-${numkey}`>
<div v-for="([field, value], valkey) in Object.entries(book)" :key=`field-${catkey}-${numkey}-${valkey}`>
{{ field }} : {{ value }}
</div>
</div>
</div>
如果您发现它太冗长,可以尝试展平以使计算数据具有以下结构:
[
{
"category": "edu",
"id": "1",
"title": "Title One",
"subtitle": "Subtitle One",
"description": "Description One",
"section": {
"1": {
"title": "Section One Title",
"content": "Section One Content"
}
}
}
]
答案 1 :(得分:0)
鉴于每个section
也是一个带有怪异数字键的对象,因此您可以按照与info
相同的方式进行迭代。
我还建议您在edu
绑定中使用可识别的值,而不要使用整个:key
对象。
<div v-for="(edu, eduId) in info" :key="eduId">
<div v-for="(section, sectionId) in edu.section" :key="sectionId">
{{ section.title }}
</div>
</div>
如果可能的话,我会更改JSON数据的格式,以使用实际的数组而不是带有数字键的对象。