当前位置: 首页 > 知识库问答 >
问题:

将JsonNode转换为java数组

韦业
2023-03-14

我正在使用websocket和JsonNode开发Play framewrok 2。前端通过使用websocket连接到play framework后端。我将javascript数组转换为json节点,并通过使用webscoket连接将其发送到后端。现在,我的问题是如何将json对象转换为java数组或任何合适的结构,以便操作数据。

这是我创建的json对象

var myjeson = {"x":arrayX,"y":arrayY} ;

这是动态填充的数组

 function pixelCount ()
    {  arrayX[counter] = xcoordinate;        
    arrayY[counter] = ycoordinate;
    socket.send(" from array X,Y  "+arrayX[counter]+ " " +arrayY[counter]); 
    ++counter;      
    }

下面的代码发送数据

$('button.send').click(function() {            
sock.send(JSON.stringify(myjeson)); 

在服务器端,我有以下代码

 public static WebSocket<JsonNode> givenIn() {
    return new WebSocket<JsonNode>() {
    // called when the websocket is established
    public void onReady(WebSocket.In<JsonNode> in, WebSocket.Out<JsonNode> out) {
    // register a callback for processing instream events             
    in.onMessage(new Callback<JsonNode>() {
    public void invoke(JsonNode event) {                 
    Logger.info(event.toString());
    }

当我检查日志时,消息已送达:下面是日志信息[info]应用程序-

{"x":
[78.72727298736572,79.72727298736572,82.72727298736572,
7298736572,93.72727298736572,83.72727298736572132.72727298736572],

"y":
[82.6363639831543,82.6363639831543,63.54545593261719,63.54545593261719,64.545455932
61719,65.54545593261719,70.54545593261719,189.5454559326172,188.5454559326172]}

现在,我想将这些数据放在一个数组中,以便访问它们。如有任何建议,将不胜感激。还欢迎另一项建议。

共有3个答案

涂溪叠
2023-03-14

"...如何将json对象转换为java数组"

import com.google.common.collect.Streams;

public void invoke(JsonNode event) {                 
    Streams.stream(event.withArray("x").elements())
        .forEach( num -> Logger.info(num.asDouble()) )
}

诀窍是首先使用“元素()”方法获取Iterator对象,然后使用Guava“流”方法获取流。一旦您有了流,您就可以执行各种数组操作(例如过滤器、地图)来使用您的数据。

公孙锋
2023-03-14

使用树模型可以快速完成此操作。。。将JSON字符串转换为JsonNode的树:

ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree("...<JSON string>...");

然后提取子节点并将它们转换为列表:

List<Double> x = mapper.convertValue(rootNode.get("x"), ArrayList.class);
List<Double> y = mapper.convertValue(rootNode.get("y"), ArrayList.class);

一个稍长但有争议的更好方法是定义一个表示您期望的JSON结构的类:

public class Request {
    List<Double> x;
    List<Double> y;
}

然后直接反序列化,如下所示:

Request request = mapper.readValue("...<JSON string>...", Request.class);
全卜霸
2023-03-14

将我的评论转移到一个答案,因为它得到了很多升级。

这应该做OP需要的事情:

<代码>新建ObjectMapper()。convertValue(jsonNode,ArrayList.class)

 类似资料:
  • 线程“main”java.lang.nosuchmethoderror中出现异常:com.fasterxml.jackson.core.jsonFactory.createparser(ljava/net/URL;)lcom/fasterxml/jackson/core/jsonParser;在com.fasterxml.jackson.databind.objectmapper.readtree

  • 问题内容: 是否可以将Java对象直接转换为JsonNode-Object? 我发现解决此问题的唯一方法是将Java对象转换为String,然后转换为JsonNode: 问题答案: 从Jackson 1.6开始,您可以使用: 要么

  • 问题内容: 这似乎有点不正常,但我在寻找一个有效的方式来变换/映射成。 我将模型的一些信息存储在json文件中,并且我必须支持模型的几个版本。 我要做的是将json文件加载到JsonNode的内存中,应用一些版本控制策略以使其与我的Model的最新版本匹配。 除非有更快的方法,否则我可能最终将手动将其应用于模型 问题答案: 在Jackson 2.4中,可以进行如下转换: 杰克逊在哪儿? 在旧版的J

  • 问题内容: 给定员工和公司等级 和我的代码如下 我希望我能得到这样的结果 这是一个简单的问题,但是我有些困惑。…尤其是Gson和Json…。 请不要提出其他图书馆,我 强制NEED 这个库的工作。而且由于某些情况,我 不 想要这个课。 因此,我需要 手动 将其序列化为json字符串。 编辑: @Sotirios Delimanolis声明的类是设计类之间关系的正确方法。但是,那不是我想要的。 @h

  • 类似于将JsonNode转换为POJO和将JsonNode转换为java array,但无法找到问题的确切解决方案。 以下是我的POJOs声明: 所以在我的测试中,我想得到一个建筑列表,并将json列表转换/绑定到一个真实对象建筑列表。 以下是我想做的: 但是,我得到以下错误: 显然,如果我在Building类中删除了构造函数,并为字段类型添加了setter,它就会起作用。但是如果我确实有一个要求