当前位置: 首页 > 面试题库 >

使用jquery从Wikimedia解析json字符串

石俊雄
2023-03-14
问题内容

试图从Wiki页面获取信息框。为此,我正在使用Wiki API。以下是我从中获取json数据的url。

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&titles=
“ + first +”&rvsection = 0

首先是一个变量,其中包含Wikipedia的文章标题。

我发现解析此数据以制作出有意义的html极其复杂。

$.each最初使用功能。但是循环很深,我不得不使用6到7次才能获得所需的实际数据。我认为会有比这更好的选择。请帮我。

json数据供参考

jQuery16209061950308827726_1334683337112({"query":{"pages":{"11039790":{"pageid":11039790,"ns":0,"title":"Animal","revisions":[{"*":"{{Redirect|Animalia}}\n{{Other uses}}\n{{pp-semi-protected|small=yes}}\n{{pp-move-indef}}\n{{Taxobox\n| color = {{taxobox color|[[animalia]]}}\n| name = Animals\n| fossil_range = [[Ediacaran]] \u2013 Recent {{fossilrange|610|0|}}\n| image = Animal diversity.png\n| image_width = 250px\n| domain = [[Eukaryota]]\n{{Taxobox_norank_entry | taxon = [[Opisthokonta]]}}\n{{Taxobox_norank_entry | taxon = [[Holozoa]]}}\n{{Taxobox_norank_entry | taxon = [[Filozoa]]}}\n| regnum = '''Animalia'''\n| regnum_authority = [[Carolus Linnaeus|Linnaeus]], [[Systema Naturae|1758]]\n| subdivision_ranks = [[Phylum|Phyla]]\n| subdivision =\n* '''Subkingdom [[Parazoa]]'''\n** [[Sponge|Porifera]]\n** [[Placozoa]]\n* '''Subkingdom [[Eumetazoa]]'''\n** '''[[Radiata]] (unranked)'''\n*** [[Ctenophora]]\n*** [[Cnidaria]]\n** '''[[Bilateria]] (unranked)'''\n*** [[Orthonectida]]\n*** [[Rhombozoa]]\n*** [[Acoelomorpha]]\n*** [[Chaetognatha]]\n*** '''Superphylum [[Deuterostomia]]'''\n**** [[Chordata]]\n**** [[Hemichordata]]\n**** [[Echinoderm]]ata\n**** [[Xenoturbellida]]\n**** [[Vetulicolia]] [[extinction|\u2020]]\n*** '''[[Protostomia]] (unranked)'''\n**** '''Superphylum [[Ecdysozoa]]'''\n***** [[Kinorhyncha]]\n***** [[Loricifera]]\n***** [[Priapulida]]\n***** [[Nematoda]]\n***** [[Nematomorpha]]\n***** [[Lobopodia]]\n***** [[Onychophora]]\n***** [[Tardigrada]]\n***** [[Arthropoda]]\n**** '''Superphylum [[Platyzoa]]'''\n***** [[Platyhelminthes]]\n***** [[Gastrotricha]]\n***** [[Rotifera]]\n***** [[Acanthocephala]]\n***** [[Gnathostomulida]]\n***** [[Micrognathozoa]]\n***** [[Cycliophora]]\n**** '''Superphylum [[Lophotrochozoa]]'''\n***** [[Sipuncula]]\n***** [[Hyolitha]] [[extinction|\u2020]]\n***** [[Nemertea]]\n***** [[Phoronida]]\n***** [[Bryozoa]]\n***** [[Entoprocta]]\n***** [[Brachiopoda]]\n***** [[Mollusca]]\n***** [[Annelida]]\n***** [[Echiura]]\n}}\n\n'''Animals''' are a major group of multicellular, [[eukaryotic]] [[organism]]s of the [[Kingdom (biology)|kingdom]] '''Animalia''' or '''Metazoa'''. Their [[body plan]] eventually becomes fixed as they [[Developmental biology|develop]], although some undergo a process of [[metamorphosis]] later on in their life. Most animals are [[Motility|motile]], meaning they can move spontaneously and independently. All animals are also [[heterotroph]]s, meaning they must ingest other organisms or their products for [[sustenance]].\n\nMost known animal [[phylum|phyla]] appeared in the fossil record as marine species during the [[Cambrian explosion]], about 542 million years ago."}]}}}})

问题答案:

如果您想要实际的html页面上显示的html,请改用action =
parse
。是的,结果对象是深层嵌套的。但是没有理由在它们上面循环!

  • 第一个属性始终是动作,在这里: query
  • 您已请求页面属性,因此您将收到 pages
  • 并以其页面ID作为关键字。这是使用循环的唯一步骤
  • 每个页面对象都有某些属性(例如标题),您对 revisions
  • 这是一个修订对象数组,您需要唯一的一个
  • 修订对象的sourcetext属性是 *

因此,只需执行以下操作:

if (data && data.query && data.query.pages)
    var pages = data.query.pages;
else
    // error: No pages returned / other problems!
for (var id in pages) { // in your case a loop over one property
    if (pages[id].revisions && pages[id].revisions[0] && pages[id].revisions[0]["*"])
        var content = pages[id].revisions[0]["*"];
    else
        // error: No revision content returned for whatever reasons!
}
// use "content" variable here

不要忘记检查每个对象的存在!如果您不请求任何页面,则将没有页面对象。仅当页面“数组”为空时才如此。页面可能缺少标题/标题无效或其他内容,因此该页面没有修订。等等



 类似资料:
  • 问题内容: 我正在尝试解析一个JSON结构,如: 也就是说,JSON中的元素是带有转义json的字符串。 所以,我有一些类似的东西 但这崩溃了 这是因为.c的输出是字符串,而不是JSON。如何让jq解析此字符串? 我最初的解决方案是使用sed将替换所有的逃生字符(,和),但凌乱的,我认为有内置的方式做到这一点? 谢谢! 编辑:另外,这里可用的jq版本是: 我想我可以根据需要更新它。 问题答案: j

  • 问题内容: 我在C#中有一个类似以下的字符串。我需要遍历并创建HTML表输出。我尝试使用JSON.NET,但无法弄清楚如何检索键(名称,年龄和工作)。 表格格式为 任何帮助将不胜感激。 Dave提供的代码在这里是理想的解决方案..但是它适用于.NET 4.0 ..我已经将JSON.NET和以下代码用于.NET 3.5 使用Newtonsoft.Json.Linq; 问题答案: 您可以使用.NET

  • 问题内容: 我在使用jQuery 解析HTML字符串时问我如何在html字符串上使用jQuery。一切正常,但是当我将其应用于ajax时-它不起作用。这是代码。 moo.html包含 如何获得斑马纹和杠铃? 问题答案: 我认为其中的换行符可能会让您失望。 html中的所有换行符最终都将由jQuery解析并保留为文本节点元素。结果,当这些节点中的第一个被命中并调用时,它将停止迭代(不适用于非Elem

  • 问题内容: 我有一个带有unicode字符的json文件,但我无法解析它。我已经在Flash CS5(JSON库)中进行了尝试,并且在http://json.parser.online.fr/中进行了尝试,但我始终会收到“意外令牌- 评估失败” 抱歉,语法确实存在问题,它是通过客户端发送的。 有人可以帮帮我吗?谢谢 问题答案: RFC: JSON文本应以Unicode编码。默认编码为UTF-8。

  • 问题内容: 我有以下Json字符串 我正在尝试解析它并打印出每个名称和值-最简单的方法是什么?我尝试了jQuery.parseJSON但我不知道如何使用它 示例代码会很棒 问题答案: 结果是: jsFiddle示例:http://jsfiddle.net/bradchristie/XtzjZ/1/

  • 问题内容: 我正在尝试解析用PHP编码并通过TCP发送到C ++客户端的JSON字符串。 我的JSON字符串如下所示: 在C ++客户端上,我正在使用jsoncpp库: 问题是我没有得到任何输出,甚至没有关于解析的错误(如果有)。你能帮我了解我做错了什么吗? 问题答案: 您的问题是:没有 root [“ name”] 。您的文档应如下所示: 和你的代码是这样的: 如果您想按原样保留数据: 使用迭代