Javascript dc.js将维度数据以json格式发送到node.js服务器,然后使用java处理数据

Javascript dc.js将维度数据以json格式发送到node.js服务器,然后使用java处理数据,javascript,java,json,dc.js,crossfilter,Javascript,Java,Json,Dc.js,Crossfilter,这是crossfilter.js和dc.js维度的输出,我想将这个字符串发送到一个java程序,将其转换为json对象,然后我想读取数据并提取一些数据。将json格式的字符串发送回客户端 这就是如何创建输出 {"Account":"789","Date":"2013-07-31","Unique Id":"2013073101","Tran Type":"TFR OUT","Cheque Number":"","TranCode":"MB TRANSFER","ThirdPartyAccount

这是crossfilter.js和dc.js维度的输出,我想将这个字符串发送到一个java程序,将其转换为json对象,然后我想读取数据并提取一些数据。将json格式的字符串发送回客户端

这就是如何创建输出

{"Account":"789","Date":"2013-07-31","Unique Id":"2013073101","Tran Type":"TFR OUT","Cheque Number":"","TranCode":"MB TRANSFER","ThirdPartyAccount":"123","Amount":"-20","formatedDate":"2013-07-30T12:00:00.000Z"}
{"Account":"789","Date":"2013-07-30","Unique Id":"2013073005","Tran Type":"TFR IN","Cheque Number":"","TranCode":"MB TRANSFER","ThirdPartyAccount":"123","Amount":"20","formatedDate":"2013-07-29T12:00:00.000Z"}
{"Account":"789","Date":"2013-07-30","Unique Id":"2013073004","Tran Type":"TFR OUT","Cheque Number":"","TranCode":"MB TRANSFER","ThirdPartyAccount":"123","Amount":"-20","formatedDate":"2013-07-29T12:00:00.000Z"}
{"Account":"789","Date":"2013-07-30","Unique Id":"2013073003","Tran Type":"CREDIT","Cheque Number":"","TranCode":"CREDIT","ThirdPartyAccount":"123","Amount":"20","formatedDate":"2013-07-29T12:00:00.000Z"}
{"Account":"789","Date":"2013-07-30","Unique Id":"2013073002","Tran Type":"TFR OUT","Cheque Number":"","TranCode":"MB TRANSFER","ThirdPartyAccount":"123","Amount":"-160","formatedDate":"2013-07-29T12:00:00.000Z"}
{"Account":"789","Date":"2013-07-30","Unique Id":"2013073001","Tran Type":"CREDIT","Cheque Number":"","TranCode":"CREDIT","ThirdPartyAccount":"123","Amount":"160","formatedDate":"2013-07-29T12:00:00.000Z"}
我的JAVA程序:

var dimData = accountDim.top(Infinity);
var dddata = [];
dimData.forEach(function (x) {
    console.log(JSON.stringify(x));
    dddata.push(JSON.stringify(x));
});
$.get(window.location.href + "toJSON?files=" + dddata.join(), function (){});
这是node.js中的http服务器

public static void main(String[] args) throws IOException, ParseException {
    JSONParser parser = new JSONParser();
    JSONObject jsons = (JSONObject) parser.parse(args[0]);
    PrintWriter writer = new PrintWriter("res.json", "UTF-8");
    writer.println(jsons);
    writer.close();
}
我的问题是,有没有更好的方法通过node.js将维度数据发送到java,如果没有,我如何将字符串转换为json,然后检索数据


有人能帮我吗?非常感谢您的帮助。

您可以使用
org.json.JSONObject
库将字符串转换为json对象,然后检索元素

var express = require('express');
var app = express();

app.use('/JS',express.static(__dirname + '/JS'));
app.use('/CSS',express.static(__dirname + '/CSS'));
app.use('/', express.static(__dirname + '/'));

app.get('/', function (req, res) {
    // res.sendFile("/index.html");
}).listen(8080);

app.get('/toJSON', function(req, res, next) {
    process.stdout.write('Extracting data to JSON...... ');
    var files = req.query.files;
    var spawn = require('child_process').spawn;
    var child = spawn('java',  ['-cp', 'Jarfile/CSVExtractor.jar:.', 'toJSON.ToJSON', files]);
    process.stdout.write("done.\n");

    child.stderr.on('data', function (data) {
    process.stderr.write(data);
    }).on('end', function() {
        res.end();
    });

    child.stdout.on('data', function (data) {
        res.write(data);
    }).on('end', function() {
        res.end();
    });
});

试试看

试试gson,您可以非常简单地将字符串解析为json

String json1 = "{\"Account\":\"789\",\"Date\":\"2013-07-31\",\"Unique Id\":\"2013073101\",\"Tran Type\":\"TFR OUT\",\"Cheque Number\":\"\",\"TranCode\":\"MB TRANSFER\",\"ThirdPartyAccount\":\"123\",\"Amount\":\"-20\",\"formatedDate\":\"2013-07-30T12:00:00.000Z\"}";

    JSONObject jsonObject = new JSONObject(json1);
    if (jsonObject.has("ThirdPartyAccount")) {
        String thirdPartyAccount = jsonObject.getString("ThirdPartyAccount");
        System.out.println(thirdPartyAccount);
    }

您可以使用谷歌的Gson库

private static JsonParser jp = new JsonParser();
String data = "......." // your data string here
JsonObject = jp.parse(data).getAsJsonObject();
事务是描述Json的纯Java。在您的情况下,它可以是:

   Gson gson = new GsonBuilder();
   Transaction transaction = gson.fromJson(args[0], Transaction.class);
若您确信您的维度的顺序并没有改变,并且是大数量的维度,那个么您可以选择下面的json(注意:null不可接受)


您可以从java客户端轻松解析它,每个索引适用于所有JSONArray,我选择了几个键和值来显示我的JSON结构。

我找到的答案是上面答案的组合。谢谢大家的帮助,我想把你们所有的回复都标记为答案,但是stackoverflow不允许这样做。很抱歉

所以我找到的答案是:

在javascript中:

{
  "Account": [
    789,
    789,
    789
  ],
  "Date": [
    "2013-07-31",
    "2013-07-30",
    "2013-07-31"
  ],
  "Unique Id": [
    2013073101,
    2013073102,
    2013073103
  ]
}
(accountDim.top(Infinity))这将在筛选之前或之后以json对象数组的形式获取所有维度数据,然后使用json.stringify将json对象数组转换为json格式的字符串,然后将请求发送到服务器

以下是java中的代码:

$.get(window.location.href + "toJSON?data=" + JSON.stringify(accountDim.top(Infinity)), drawForceLayout);
JSONArray-JSONArray=newjsonarray(args[0]);
for(int i=0;i
账目是我的目标。使用JSONObject检索数据

java库是org.json.JSONArray


再次感谢你的帮助

我会使用Jackson的com.fasterxml.Jackson.databind.objectmapperperthank你,我会稍后再试!所以,我需要制作一个JSONObject列表来存储数据?在您的问题中,您提到了6个字符串。它不是一个字符串。是的,我的意思是我需要创建一个JSONObject列表并逐个读取该字符串,然后将其转换为JSONObject,存储到JSONObject列表中吗?或者,这可以将数组列表转换为JSONObject。谢谢。JSONObject类中没有这样的构造函数将列表作为输入。因此,您不能使用此库直接将列表转换为json对象。非常感谢。我以后再试试!非常感谢你,但我不能为此制作对象,因为内容是随机的。无论如何,谢谢你的帮助。非常感谢你,我以后会试试的!谢谢,但是我如何才能以你告诉我的格式在js中创建json对象?你想让我为你编码吗?每个有效的json对象都应该通过.js创建。请仔细检查,在json中掌握json需要几个小时JavaScript@Kreedz您的问题是,是否有更好的方法通过node.js将维度数据发送到java,您使用java作为客户端,Node.js作为服务器端。很抱歉误解了。我使用node和java作为服务器端,js作为客户端。谢谢,我使用JSONArray来处理请求。正如我所预料的那样!感谢您的帮助,我已经使用
var-forceLayoutJson=[]解决了这个问题;forEach(函数(x){forceLayoutJson.push(JSON.parse(JSON.stringify(x));});$。获取(window.location.href+“toJSON?files=“+JSON.stringify(forceLayoutJson),drawForceLayout)和JSONArray来处理请求。
{
  "Account": [
    789,
    789,
    789
  ],
  "Date": [
    "2013-07-31",
    "2013-07-30",
    "2013-07-31"
  ],
  "Unique Id": [
    2013073101,
    2013073102,
    2013073103
  ]
}
$.get(window.location.href + "toJSON?data=" + JSON.stringify(accountDim.top(Infinity)), drawForceLayout);
JSONArray jsonArray = new JSONArray(args[0]);
for (int i = 0; i < jsonArray.length(); i++){
        JSONObject jsonObj = jsonArray.getJSONObject(i);
        accounts.put(jsonObj.getString("Account"), jsonObj.getDouble("Amount"), jsonObj.getString("ThirdPartyAccount"));
    }