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

如何在JavaScript中解析由Android JSONObject组成的Android JSONArray?,javascript,android,node.js,arrays,mongojs,Javascript,Android,Node.js,Arrays,Mongojs,我有一个Android应用程序和一个带有Node.js的服务器,它使用Restify.js和MongoJS来存储Android应用程序之间的数据 现在,我使用的是来自Android的JSONArray,但在我的例子中,它是基于原始库的json简单库,我还有一个JSONArray,其中包含来自json简单库的JSONObject 在我的例子中,JSONObject如下所示: { "PLACE_NAME":"Paris", "COLOR_ID":"2131099684", "

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

现在,我使用的是来自Android的JSONArray,但在我的例子中,它是基于原始库的json简单库,我还有一个JSONArray,其中包含来自json简单库的JSONObject

在我的例子中,JSONObject如下所示:

{
    "PLACE_NAME":"Paris",
    "COLOR_ID":"2131099684",
    "LIST_DATES":["2014-05-23","2014-05-22","2014-05-21"]
}
[
    {
        "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
]
我在这里的观点是,我有许多JSONObject,它们显然尊重相同的架构:地名、颜色ID和日期列表

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

myJsonArray.addmyJsonObj

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

{
    "PLACE_NAME":"Paris",
    "COLOR_ID":"2131099684",
    "LIST_DATES":["2014-05-23","2014-05-22","2014-05-21"]
}
[
    {
        "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

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

请求参数的console.logcontent->%s,request.params

我明白了:

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

显然是

[对象]

前面提到的JSONObject正确吗

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

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


谢谢你的帮助

是的,如果要获取对象,需要像这样读取对象的属性

jsonArray.PLACE_NAME
jsonArray.COLOR_ID
然后它会给你价值


试试这个,希望它能帮助您解决问题。

尝试使用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"
}
当然,因为JSONParsed它是一个数组,所以可以迭代它来获得每个对象

希望能有帮助

编辑
实际上,如果在Chrome中运行js文件时在其中放置一个断点,您可以确切地看到响应是如何产生的,应该是一个字符串,而JSONParsed是如何构建的,应该是一个对象数组。

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

事实上,问题并没有那么难,只是我很难找到迭代请求参数的方法

这是源代码,它工作得很好:

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.js和MongoJS,它是如此简单和优秀^^

谢谢大家


PS:如果可以的话,我想问一个附带问题:在这种情况下,定义一个版本的server.post是有帮助的和/或需要的?该指南帮助我设置了我的服务器:

控制台只是告诉您,它正试图输出一个对象,鉴于JSON代表JavaScript对象符号,该对象可能是正确的。点击此处查看如何迭代JSON数据。@ArmadDrive感谢您的回复。我查看了你提供的链接,但是我在遍历请求参数时遇到了麻烦。在尝试访问单个参数时,似乎出现了500个内部错误。如果我这样尝试:request.params[1],它将不起作用。如果我尝试在request.params中使用foreach:for var param,控制台会打印一个数字,可能是索引。。。这是我的。。。