【问题标题】:How to parse Android JSONArray made of Android JSONObjects in JavaScript?如何在 JavaScript 中解析由 Android JSONObjects 构成的 Android JSONArray?
【发布时间】:2014-05-19 12:38:27
【问题描述】:

我有一个 Android 应用程序和一个带有 Node.js 的服务器,它使用 Restify.js 和 MongoJS 在我的 android 应用程序中存储数据。

目前,我正在使用 Android 的 JSONArray(但在我的情况下,它是基于原始库的 json-simple 库)并且我有一个包含 JSONObjects 的 JSONArray(也来自 json-simple 库)。

在我的例子中,一个 JSONObject 如下:

{
    "PLACE_NAME":"Paris",
    "COLOR_ID":"2131099684",
    "LIST_DATES":["2014-05-23","2014-05-22","2014-05-21"]
}

我的意思是,我有许多 JSONObjects,它们显然遵循相同的架构:地名、颜色 ID 和日期列表。

之后,我将这个 JSONObjects 存储在我的 JSONArray 中。 像这样简单,在一个循环中,对于我拥有的尽可能多的 JSONOBject:

myJsonArray.add(myJsonObj);

因此,我的 JSONArray 的内容如下:

[
    {
        "PLACE_NAME":"Paris",
        "COLOR_ID":"2131099684",
        "LIST_DATES":["2014-05-23","2014-05-22","2014-05-21"]
    },

    {
        "PLACE_NAME":"Milan",
        "COLOR_ID":"2131099667",
        "LIST_DATES":["2014-05-14","2014-05-16","2014-05-15"]
    }
    // ... and it goes on and on
]

到目前为止,数据架构运行良好,因为我可以存储在一个文件中,并且感谢来自 json-simple lib 的 JSONArray,我可以使用可以轻松解析文件的内置解析器。

因此,当我想从存储在文件中的 JSONArray 中检索所有 JSONObjects 时,就这么简单:

final FileReader fr = new FileReader(homeActivitySavesPath.getAbsolutePath());
        final JSONParser parser = new JSONParser();
        this.jsonArray = (JSONArray) parser.parse(fr);
        if (this.jsonArray.size() >= 1) {
            for (int i = 0; i < this.jsonArray.size(); i++) {
                final JSONObject jsonObject = (JSONObject)this.jsonArray.get(i);
                // ... doing some logical code to restore data
                }
 }

由于我是 JavaScript 新手,我很难解析这种 JSONArray。

为了开始了解如何解析,我打印了我通过来自 Android 应用程序的 HTTP 连接发送的 POST 请求的内容:'

console.log("请求参数的内容 -> %s", request.params);

我明白了:

请求参数的内容 -> [object Object],[object Object],[object 对象],[对象对象],[对象对象],[对象对象],[对象 对象]

很明显

[对象对象]

前面提到的 JSONObject 对吗?

那么,您将如何在 JavaScript 中构建一个能够遍历这种 JSONArray 的循环?

我想将每个 JSONObject 分别存储在我的 MongoDB 集合中。

感谢您的帮助!

【问题讨论】:

  • 控制台只是告诉您它正在尝试输出一个对象(鉴于 JSON 代表 JavaScript 对象表示法,这可能是正确的。查看此处stackoverflow.com/questions/1078118/… 以了解如何迭代 JSON 数据。
  • @armadadrive 感谢您的回复。我查看了您提供的链接,但无法遍历请求参数。尝试访问单个参数时,我似乎得到了500 internal error。如果我这样尝试:request.params[1] 它不起作用。如果我尝试通过 foreachfor (var param in request.params) 控制台打印一个数字,可能是索引...这令人沮丧...

标签: javascript android node.js arrays mongojs


【解决方案1】:

是的,你正在获取对象,你需要像这样读取对象的属性

jsonArray.PLACE_NAME
jsonArray.COLOR_ID

那么它会给你价值。

试试这个,希望对你的问题有帮助。

【讨论】:

    【解决方案2】:

    尝试使用 jQuery,一旦获得字符串响应,就可以使用 biult in 函数对其进行解析,如下所示:

    function (response){
     var theJsonParsed = $.parseJSON(response);
     var myFirstObject = theJsonParsed[0];
     var placeName = myFirstObject['PLACE_NAME'];
     console.log(placeName); // This should output "Paris"
    }
    

    当然因为theJsonParsed是一个数组,你可以迭代它来获取每个对象。

    希望对你有帮助。

    编辑

    其实,如果你在 Chrome 中运行的时候在 js 文件中下一个断点,你就可以确切地看到response 是怎么来的(应该是String)以及theJsonParsed 是如何构建的(应该是对象数组)。

    【讨论】:

      【解决方案3】:

      谢谢大家的回答,它帮助我找到了有效的解决方案。

      这个问题其实并没有那么难,只是我很难找到一种方法来遍历请求参数。

      所以这是源代码,效果很好:

      server.post({path : TPATH, version : '0.0.1'}, saveNewTravel);
      
      
      function saveNewTravel(req, res, next) {
          res.setHeader('Access-Control-Allow-Origin','*');
          var JSONArray = req.params;
          for (var it = 0; it < req.params.length; it++) {
              var JSONObject = req.params[it];
              var travel = {};
              travel.LIST_DATES = JSONObject.LIST_DATES;
              travel.PLACE_NAME = JSONObject.PLACE_NAME;
              travel.COLOR_ID = JSONObject.COLOR_ID;
              travels.save(travel, function(error, success) {
                  if (success) {
                      res.send(201, success);
                      return next();
                  } else
                      return next(error);
              });
          }
      }
      

      使用 Restify.jsMongoJS 非常简单,非常好^^

      谢谢大家!!

      PS:一个附带问题,如果可以的话:在这种情况下定义我的server.post 的版本是有帮助的和/或需要的?该指南帮助我设置了服务器:https://www.openshift.com/blogs/day-27-restify-build-correct-rest-web-services-in-nodejs

      【讨论】:

        猜你喜欢
        • 2017-08-15
        • 2012-06-21
        • 1970-01-01
        • 2018-10-16
        • 2013-06-12
        • 1970-01-01
        • 2012-10-05
        • 2017-09-06
        • 2016-08-12
        相关资源
        最近更新 更多