Python元组在Java XMLRPC中的应用

19

我正试图通过java的xmlrpc传递python元组。这是我正在使用的库:XMLPRC Java Library

我在服务器上使用odoo框架和API。我想传递以下参数:

[(4,7),(4,8)]

我可以传递以下结构:

[[4,7],[4,8]]

这显然是一个数组内部还有一个数组,如下所示:

new Object[]{new Object[]{4,7},new Object[]{4,8}}

问题在于Java中没有元组。我需要解决的是如何转换这个结构:

将 [4, 8] 转换成 This(4, 8)

这是一种序列化问题,我不知道如何解决它并传递期望的Python结构。


1
你在尝试进行xmlrpc调用时是否出现错误?此外,请检查您的库文档中可以使用的数据类型。 - George Daramouskas
你是否正在寻找一个新的类来定义(a, b),就像https://dev59.com/B2kv5IYBdhLWcg3w9lai?noredirect=1&lq=1这样的? - Gang
5个回答

1
这段代码中的[[4,7],[4,8]]有问题吗?大多数Python操作不会区分元组和实际列表,而在Odoo中更是如此。我认为这是通过未实现元组的语言发送元组列表的正确方式。元组不是键值对的东西。你可以有一个(a,b,c),它是一个元组。这与[a,b,c]有些相似。你可以对两者进行迭代。你可以通过索引获取它们的值(如果两者都存储在一个element变量中,则从中获取a的方式对它们都是element[0])。
所以,如果你有问题,我认为问题不在于元组,并且你没有回答关于XMLRPC调用是否有错误的评论。我猜想没有错误。即使有错误,我相信也不是关于元组的问题。

0

XML-RPC的功能有限。因此,列表和元组只有一种类型。如果您查看odoo文档,您会发现Python示例中的元组和列表都转换为Java中的Arrays.asList。因此,如果您遇到一些错误,很可能是其他问题导致的。


0
经过长时间的搜索,我终于找到了解决方案。因此,我决定清楚地回答它。我的答案最有可能是针对odoo方面的。到目前为止,我还没有找到序列化该结构的方法。但是odo框架以以下方式接受元组:
[ [ 4, [7,8] ]

或者

Arrays.asList(Arrays.asList(4, Arrays.asList(7,8)));

这相当于:

[(4,3),(4,7)]

希望这能帮助到某个人。

0
一个简单的想法是将其作为字符串发送。就像在Java中一样:
String a="[[4,7],[4,8]]";

在Python中,您可以简单地使用eval()方法将其作为数组的数组获取。如果您想要它作为元组的数组,请使用:
String a="[(4,7),(4,8)]";

只需将Python语法用作字符串即可。在Python中,您可以使用:

my_list=eval(a)
print my_list[0]

它将会给出:

(4,7)

作为最后一个示例的输出。


1
您也可以考虑使用JSON。 - Mohammed Shareef C

0

你尝试使用过Apache commons Pair类吗?文档

我刚做了一个快速测试,这看起来就是你想要的。

    System.out.println(new ImmutablePair<>(1,3).toString());
    (1,3)

默认的序列化器应该以你期望的[(1,2),...]格式输出Pair []。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接