首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Javascript中读取JSON文件

在Javascript中读取JSON文件
EN

Stack Overflow用户
提问于 2014-06-16 23:17:54
回答 3查看 253关注 0票数 0

首先,我必须说,我已经检查了与我的问题相关的其他堆栈溢出问题,但事实证明它们都没有帮助我。这就是我发布这篇文章的原因。

我制作了这个小的phonegap/cordova应用程序,运行良好:

index.html:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
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文件,如下所示:

代码语言:javascript
复制
{
    "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,但都不适合我。

有什么想法吗,伙计们?

谢谢

EN

回答 3

Stack Overflow用户

发布于 2014-06-16 23:22:34

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

票数 1
EN

Stack Overflow用户

发布于 2014-06-16 23:28:29

我对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将失败。

票数 0
EN

Stack Overflow用户

发布于 2014-06-17 17:22:05

我不完全理解您的问题,但是下面的代码和注释可能会对您有所帮助。

代码语言:javascript
复制
    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中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24246974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档