【发布时间】:2015-09-03 06:50:43
【问题描述】:
我目前正在使用 Ionic Cordova 和 AngularJS 进行一个小项目。在这个项目中,我想使用 YQL 从网站获取当前信息。我的 $http.jsonp 请求如下所示:
*"https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D'http%3A%2F%2Fwww.imensa.de%2Fhildesheim%2Fmensa-uni%2Findex.html'%20and%20xpath%3D'%2F%2Fdiv%5B%40class%3D%22primary%20meal%22%5D'&format=json&callback=JSON_CALLBACK"*
翻译成这个 YQL 控制台查询:
*select * from html where url='http://www.imensa.de/hildesheim/mensa-uni/index.html' and xpath='//div[@class="primary meal"]'*
我现在收到的 JSON 数据结构让我有点困惑,因为它看起来不像是直接的 JSON。
{
"query": {
"count": 8,
"created": "2015-09-03T06:27:03Z",
"lang": "en-US",
"results": {
"div": [
{
"class": "primary meal",
"id": "m2267999",
"div": {
"class": "description",
"p": "Gebackener Seelachs mit Remoulade"
},
"p": {
"class": "price",
"span": {
"title": "Preis für Studierende",
"content": "2,10 €"
}
},
"ul": {
"class": "attributes",
"li": [
"Fisch",
{
"class": "group",
"content": "Zusatz"
},
"Farbstoff",
"Süßungsmittel",
{
"class": "group",
"content": "Allergen"
},
"Ei",
"Gluten",
"Senf",
{
"class": "group",
"content": "Zuletzt"
},
"23.07.2015"
]
}
},
{
"class": "primary meal",
"id": "m3472645",
"div": {
"class": "description",
"p": "Kartoffel-Erbseneintopf in Sojarahm mit Koriander und Minze"
},
"p": {
"class": "price",
"span": {
"title": "Preis für Studierende",
"content": "2,00 €"
}
},
"ul": {
"class": "attributes",
"li": [
"Vegan",
{
"class": "group",
"content": "Zusatz"
},
"Antioxidationsmittel",
{
"class": "group",
"content": "Allergen"
},
"Gluten",
"Soja",
{
"class": "group",
"content": "Zuletzt"
},
"23.07.2015"
]
}
},
{
"class": "primary meal",
"id": "m1258254",
"div": {
"class": "description",
"p": "Hähnchen Piccata mit Tomatensauce"
},
"p": {
"class": "price",
"span": {
"title": "Preis für Studierende",
"content": "2,10 €"
}
},
"ul": {
"class": "attributes",
"li": [
"Geflügel",
{
"class": "group",
"content": "Zusatz"
},
"Farbstoff",
"Geschwefelt",
{
"class": "group",
"content": "Allergen"
},
"Ei",
"Gluten",
"Milch",
{
"class": "group",
"content": "Zuletzt"
},
"23.07.2015"
]
}
},
{
"class": "primary meal",
"id": "m6583065",
"div": {
"class": "description",
"p": "Kräuterkartoffeln"
},
"p": {
"class": "price",
"span": {
"title": "Preis für Studierende",
"content": "0,40 €"
}
},
"ul": {
"class": "attributes",
"li": [
"Vegan",
{
"class": "group",
"content": "Zuletzt"
},
"25.08.2015"
]
}
},
{
"class": "primary meal",
"id": "m3478290",
"div": {
"class": "description",
"p": "Penne Rigate"
},
"p": {
"class": "price",
"span": {
"title": "Preis für Studierende",
"content": "0,40 €"
}
},
"ul": {
"class": "attributes",
"li": [
"Vegan",
{
"class": "group",
"content": "Allergen"
},
"Gluten",
{
"class": "group",
"content": "Zuletzt"
},
"23.07.2015"
]
}
},
{
"class": "primary meal",
"id": "m4797363",
"div": {
"class": "description",
"p": "Pfannengemüse"
},
"p": {
"class": "price",
"span": {
"title": "Preis für Studierende",
"content": "0,50 €"
}
},
"ul": {
"class": "attributes",
"li": [
"Vegan",
{
"class": "group",
"content": "Zuletzt"
},
"23.07.2015"
]
}
},
{
"class": "primary meal",
"id": "m2931855",
"div": {
"class": "description",
"p": "Creme-Dessert Erdbeer"
},
"p": {
"class": "price",
"span": {
"title": "Preis für Studierende",
"content": "0,50 €"
}
},
"ul": {
"class": "attributes",
"li": [
{
"class": "group",
"content": "Allergen"
},
"Milch",
{
"class": "group",
"content": "Zuletzt"
},
"23.07.2015"
]
}
},
{
"class": "primary meal",
"id": "m943602",
"div": {
"class": "description",
"p": "Kirschquark"
},
"p": {
"class": "price",
"span": {
"title": "Preis für Studierende",
"content": "0,50 €"
}
},
"ul": {
"class": "attributes",
"li": [
"Vegetarisch",
{
"class": "group",
"content": "Allergen"
},
"Milch",
{
"class": "group",
"content": "Zuletzt"
},
"gestern"
]
}
}
]
}
}
}
我已经发现我可以使用如下语句遍历这个对象:
{{ data.query.results.div.div.p }}
例如,获取始终包含膳食标题的“主餐”p-tag。但是,不总是相同的信息呢?例如,当我想获取一顿饭的所有过敏原时,我必须在之后获取所有数据
"content": "Allergen"
直到下一个
"class": "group",
我完全不知道该怎么做。 如果您有任何建议,请告诉我。
【问题讨论】:
标签: javascript json angularjs cordova yql