如何使用JavaScript解析带有数组的外部JSON文件

3

我目前正在尝试使用JavaScript读取JSON文件的问题。
我不确定这是否是带有数组的JSON文件的正确格式,但以下是我的JSON文件。

  [
      {
       "passageNumber":"2.3.1",
       "title":"Inside and out: A bronze Athena and a Temple of Octavia",
        "preReading":"This paragraph appears to refer to what the excavators named Temple E...",
        "reading":"<span>Lorem</span> ipsum <span>dolor</span> sit amet, consectetur",
        "media":"<img src='img/TempleE-capital.jpg'>",
        "lon":"41.925",
        "lat":"-91.426"
       },
       {
        "passageNumber":"2.3.2",
        "title":"The Road to Lechaeum",
        "preReading":"<a href='http://google.com'>yipppie",
        "postReading":"",
        "reading":"blahhhhhhhhhhhhhhhhhh.",
        "media":"<img src='img/templE-brick.jpg'>",
        "lon":"41.625",
        "lat":"-91.672"
       }
   ]

最终我希望能够读取JSON文件(可能使用JQuery),然后根据段落编号选择所有信息。
任何帮助都是惊人的。
谢谢!
编辑 我正在从外部JSON文件中提取此信息。它需要加载JSON文件。


可能是在JavaScript中解析JSON?的重复问题。 - Jeroen Vervaeke
一旦您使用Ajax加载了文件,只需使用JSON.parse(theString)即可获取JS对象。 - blex
您可以在 https://www.jsoneditoronline.org/ 上验证您的 JSON。 - vinayakj
3个回答

4
以下是读取JSON的示例代码片段。

var JSONDataFromExternalFile = '[{"passageNumber":"2.3.1","title":"Inside and out: A bronze Athena and a Temple of Octavia","preReading":"This paragraph appears to refer to what the excavators named Temple E...","reading":"<span>Lorem</span> ipsum <span>dolor</span> sit amet, consectetur","media":"<img src=\'img/TempleE-capital.jpg\'>","lon":"41.925","lat":"-91.426"},{"passageNumber":"2.3.2","title":"The Road to Lechaeum","preReading":"<a href=\'http://google.com\'>yipppie","postReading":"","reading":"blahhhhhhhhhhhhhhhhhh.","media":"<img src=\'img/templE-brick.jpg\'>","lon":"41.625","lat":"-91.672"}]'

var data = JSON.parse(JSONDataFromExternalFile);

function getDetails(passageNumber){

  for(i in data){
    if (data[i].passageNumber == passageNumber)
      return data[i];
  }
  return false;
}

var details = getDetails("2.3.2");
alert("title > "+details.title);
alert("preReading > "+details.preReading);

var details = getDetails("2.3.1");
alert("title > "+details.title);
alert("preReading > "+details.preReading);

在你的代码中,它可能看起来像这样。
更新
$.ajax({
     url: "http://www.json-generator.com/api/json/get/cgRivNixNK",
     type: "POST", //type:"GET"
     dataType: "JSON",
     success: function(data){
           console.log(data)
     }
})

或者

$.ajax({
     url: "http://www.json-generator.com/api/json/get/cgRivNixNK",
     type: "POST", //type:"GET"
     dataType: "JSON"
})
.done(function(data){
           console.log(data)
});

这不是使用JSON文件,而是使用名为_data_的JavaScript对象来充当JSON。我必须直接从外部JSON文件中提取它。 - RYDiiN
外部JSON并没有什么区别,我还添加了使用外部JSON的示例代码:$.ajax({... - vinayakj
这是一个关于编程的内容,翻译成中文如下:这是一个AJAX调用,用于获取外部JSON文件,其中“url”是外部JSON文件的地址。 - vinayakj
我目前遇到的问题比应该遇到的要多。我尝试读取一个外部JSON文件,但没有成功。我不确定我做错了什么。我一直在尝试打印我的JSON文件的内容,但这只会带来更多的挫败感。以下是我目前的代码,请问我做错了什么吗?$.ajax({ url: "src/passages.json", type: "POST", dataType: "JSONP", done: function(data){ var obj = jQuery.parseJSON(data); console.log(data); } }) - RYDiiN
使用 DOM API 将内容放置在 HTML 文档中,类似于 document.getElementById('IDOfElement').innerHTML = data[index].title - vinayakj
显示剩余2条评论

0

function getDetails(passageNumber, strJSON) {
    var obj = jQuery.parseJSON(strJSON);
    
    
    $.each(obj, function (key, value) {
        if (passageNumber == value.passageNumber) {
   
            result = value;
            return false;
        }
    });
    
    return result;
}


var strJSON = '[\
  {"passageNumber":"2.3.1",\
   "title":"Inside and out: A bronze Athena and a Temple of Octavia",\
    "preReading":"This paragraph appears to refer to what the excavators named Temple E...",\
    "reading":"<span>Lorem</span> ipsum <span>dolor</span> sit amet, consectetur",\
    "media":"<img src=\'img / TempleE - capital.jpg \'>",\
    "lon":"41.925",\
    "lat":"-91.426"},\
   {"passageNumber":"2.3.2",\
    "title":"The Road to Lechaeum",\
    "preReading":"<a href=\'http: //google.com\'>yipppie",\
  "postReading": "",\
  "reading": "blahhhhhhhhhhhhhhhhhh.",\
  "media": "<img src=\'img/templE-brick.jpg\'>",\
  "lon": "41.625",\
  "lat": "-91.672"\
}\
]';


var result = getDetails("2.3.1", strJSON);
if(result != null) {
    alert(result.passageNumber);
    alert(result.title);
    
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

这是一个非常有效的格式,表示对象数组。

要通过段落编号查找信息,可以使用以下函数:

function getDetails(passageNumber, strJSON) {
    var obj = jQuery.parseJSON(strJSON);


    $.each(obj, function (key, value) {
        if (passageNumber == value.passageNumber) {

            result = value;
            return false;
        }
    });

    return result;
}

只需将您的段落编号和json文本传递给函数,它将返回映射到该特定段落编号的相应信息。我也附上了代码片段。
如果段落编号是唯一的,并且获取数据的调用很频繁,预处理数据以存储为键值对的段落编号和相应数据将是一个好主意。

0

是的,那个示例是有效的JSON。

你可以使用jQuery.getJSON读取文件并处理数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接