在Javascript中读取JSON文件

时间:2014-06-16 15:17:54

标签: javascript json cordova nfc

首先,我必须说我已经检查了与我的问题相关的其他stackoverflow问题,但事实证明他们都没有帮助我。这只是我发布此内容的原因。

我制作了这款小巧的phonegap / cordova应用程序:

index.html:

<html>
   <head>
      <title>NFC tag ID reader</title>
   </head>
   <body style="font-size: 1.4em;">
      <div class="app">
         <div id="messageDiv"></div>
      </div>
      <script type="text/javascript" src="cordova.js"></script>
      <script type="text/javascript" src="js/index.js"></script>

      <script type="text/javascript">
        app.initialize();
      </script>
   </body>
</html>

js / index.js:

var app = {
/*
   Application constructor
 */
   initialize: function() {
      this.bindEvents();
      console.log("Starting NFC Reader app");
   },
/*
   bind any events that are required on startup to listeners:
*/
   bindEvents: function() {
      document.addEventListener('deviceready', this.onDeviceReady, false);
   },

/*
   this runs when the device is ready for user interaction:
*/
   onDeviceReady: function() {

      nfc.addTagDiscoveredListener(
         app.onNfc,             // tag successfully scanned
         function (status) {    // listener successfully initialized
            app.display("Bonjour, veuillez vous identifier.");
         },
         function (error) {     // listener fails to initialize
            app.display("NFC reader failed to initialize " +
               JSON.stringify(error));
         }
      );
   },

/*
   displays tag ID from @nfcEvent in message div:
*/



   onNfc: function(nfcEvent) {
  var tag = nfcEvent.tag;
  var nfcUid = nfc.bytesToHexString(tag.id);
 var myDb = {
"048574220e2a80": {
    "name": "name1",
    "firstname": "fname1",
    "societe": "agency1"
},
"04ddfd12872a80": {
    "name": "name2",
    "firstname": "fname2",
    "societe": "agency2"
 },
"04d0fd12872a80": {
    "name": "name3",
    "firstname": "fname3",
    "societe": "agency3"
 }
 };


  app.display(myDb[nfcUid].name + ' ' + myDb[nfcUid].firstname + ' travaille chez : ' + myDb[nfcUid].societe);

  },

   /*
      appends @message to the message div:
   */
   display: function(message) {
      var label = document.createTextNode(message),
         lineBreak = document.createElement("br");
      messageDiv.appendChild(lineBreak);         // add a line break
      messageDiv.appendChild(label);             // add the text
   },
   /*
      clears the message div:
   */
   clear: function() {
       messageDiv.innerHTML = "";
   }
};     // end of app

有趣的是onNFC功能等待NFC标签,然后在屏幕上显示与uid标签对应的人的名字(首先通过检查json数据库)。这样,数据不会存储在标记中,而是直接存储在json文件中。

我想要的是使用相同的结构,但使用index.js文件中的json文件。这就是我遇到问题的地方......

我的index.html没有改变,我刚刚创建了一个这样的db.json文件:

{
    "048574220e2a80": {
        "name": "name1",
        "firstname": "fname1",
        "societe": "agency1"
    },
    "04ddfd12872a80": {
        "name": "name2",
        "firstname": "fname2",
        "societe": "agency2"
     },
    "04d0fd12872a80": {
        "name": "name3",
        "firstname": "fname3",
        "societe": "agency3"
     }

我的/js/index.js文件中的更改是onNFC函数,但我不知道如何访问db.json文件,然后执行与以前相同的操作。我尝试了几种方法,比如使用jquery或使用JSON.parse,但它们都不适用于我。

任何想法的人?

由于

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。要阅读您的文件,请使用JSON.parse(string)。它会将您的string数据转换为object

答案 1 :(得分:0)

我对cordova了解不多,我不确定你要做什么,但你可以使用cordova api读取文件,如下所述:http://cordova.apache.org/docs/en/2.5.0/cordova_file_file.md.html

如果您正在阅读的是JSON,您可以随时将其内容传递给 JSON.parse 函数,该函数将返回本机javascrip对象。请注意,json内容是有效的JSON,否则JSON.parse将失败。

答案 2 :(得分:0)

我不完全了解您的问题,但以下代码和说明可能会对您有所帮助,

    var data = {
    "048574220e2a80": {
        "name": "name1",
        "firstname": "fname1",
        "societe": "agency1"
    },
    "04ddfd12872a80": {
        "name": "name2",
        "firstname": "fname2",
        "societe": "agency2"
     },
    "04d0fd12872a80": {
        "name": "name3",
        "firstname": "fname3",
        "societe": "agency3"
    }};
    alert(data['048574220e2a80']['name']);
    alert(data['048574220e2a80']['firstname']);
    alert(data['048574220e2a80']['societe']);

动态生成的数据是否会抛出AJAX或静态并在开始时就知道了?

如果它是静态的,你可以把它作为静态数据放在js中。