如何在JavaScript中解析由Android JSONObjects组成的Android JSONArray?

时间:2014-05-19 12:38:27

标签: javascript android node.js arrays mongojs

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

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

在我的例子中,JSONObject如下:

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

我的观点在这里,我有许多明显尊重相同架构的JSONObject:地名,颜色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中检索所有JSONObject时,它很简单:

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请求的内容:&#39;

  

console.log(&#34;请求参数的内容 - &gt;%s&#34;,request.params);

我明白了:

  

请求参数的内容 - &gt; [object Object],[object Object],[object   对象],[对象对象],[对象对象],[对象对象],[对象   对象

显然是

  

[object Object]

是前面提到的JSONObject吗?

Sor你如何在JavaScript中构建一个能够循环遍历这种JSONArray的循环?

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

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

是的,你得到了对象,你需要像这样读取对象的属性

jsonArray.PLACE_NAME
jsonArray.COLOR_ID

然后它会给你价值。

试试这个,希望这可以帮助您解决问题。

答案 1 :(得分:0)

尝试使用jQuery,一旦得到字符串响应,就可以用函数中的biult解析它,如下所示:

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的方式构建(应该是一个对象数组)。

答案 2 :(得分:0)

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

问题实际上并不那么困难,只是我找不到迭代请求参数的方法。

所以这是源代码,它运作良好:

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