$ .getJson函数,标题中包含特殊字符

时间:2012-10-31 11:15:02

标签: jquery html json getjson

我遇到了这个问题: 我尝试将.json文件中的数据加载到我的网站,但是我对标题中的特殊字符(Ó,Í,É,space)有疑问。我只能更改.HTML文件 这是一个例子:

上传.json:

{
    "Bibliotecas": [
        {
            "BIBLIOTECA": "Biblioteca General de Navarra ",
            "DIRECCIÓN ": "Plaza de San Francisco",
            "COD. POSTAL": 31001,
            "POBLACIÓN": "Pamplona",
            "TELÉFONO": 848427797,
             .....................

html的:

<!DOCTYPE HTML> 
<html>
    <head>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">

    <title>JSON multiple zombies
    </title> 

    <script src="HostFiles/jquery.js"></script>
    <link href="reset.css" rel="stylesheet" type="text/css" media="screen">




    <script>


        $(document).ready(function() {
                 $.getJSON('json/bibliotecas.json', function(json) { 

                 $.each(json.Bibliotecas, function () {

                 $('<article class="json"></article>').append(

                 '<p> ' + this.BIBLIOTECA + '</p>'  + 
                 '<p> ' + this["DIRECCIÓN "] + '</p>' + 
                 '<p> ' + this.POBLACIÓN + '</p>' + 
                 '<p> ' + this.TELÉFONO + '</p>'  + 


                 '</br></br>'
                 ).appendTo('body');


    });          

  });

});





    </script>





</head> 
<body> 

</body>
    </html>

结果:

Biblioteca General de Navarra

undefined

undefined

undefined

2 个答案:

答案 0 :(得分:2)

您应该使用square bracket notation

$.each(json.Bibliotecas, function() {
    $('<article class="json"></article>').append(
        '<p> ' + this["BIBLIOTECA"] + '</p>'  +   
        '<p> ' + this["DIRECCIÓN"] + '</p>' + 
        '<p> ' + this["POBLACIÓN"] + '</p>' +  
        '<p> ' + this["TELÉFONO"] + '</p>'  +
        // ...

答案 1 :(得分:0)

在Javascript中,这些特殊字符不是有效标识符,因此您可以使用它们来定义对象和/或变量 因此,您无法使用它们来使用点语法遍历对象。

但是,您可以使用[key]语法访问它们:

var direction = obj["Bibliotecas"][0]["DIRECCIÓN "];

正如您所见here

你的循环会变成这样:

$.each(json["Bibliotecas"], function (index, value) {
    $('<article class="json"></article>').append(
        '<p> ' + value["BIBLIOTECA"] + '</p>'  +
        '<p> ' + value["COD. POSTAL"] + '</p>' + 
        '<p> ' + value["DIRECCIÓN "] + '</p>' + 
        '<p> ' + value["POBLACIÓN"] + '</p>' +  
        '<p> ' + value["TELÉFONO"] + '</p>' + ...
    );
});

更新1

$.each()方法使用两个参数调用回调,function (index, value)用于数组,function (key, value)用于对象映射;它也不会应用不同的上下文。
因此,我们必须使用回调参数而不是 this来访问这些值。 我已经更新了代码以反映这一点。