2017-02-08 27 views
16

Próbuję przekazać Pythona tuple nad java xmlrpc. Oto biblioteka, której używam: XMLPRC Java LibrayPython Tuple w Javie XMLRPC

Używam frameworka ODoo na serwerze i api. Chcę przekazać argument, który będzie wygląda tak:

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

jestem w stanie przekazać następującą strukturę:

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

która jest wyraźnie tablicy wewnątrz macierzy, takich jak:

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

problemem jest to, że nie ma krotki w java. Co ja wchłonąć to, jak przekształcić tę strukturę:

Ten [4,8], aby ta (4,8)

Jest jakiś rodzaj problemu serializacji co nie wiem jak rozwiązać to i przekazać oczekiwaną strukturę Pythona.

+1

Czy pojawia się błąd podczas próby wykonania wywołania xmlrpc? Sprawdź także typy danych, których możesz użyć w dokumentacji biblioteki. –

+0

szukasz nowej klasy definiującej '(a, b)', tak jak 'http: //stackoverflow.com/questions/10234487/storing-number-pairs-in-java? Noredirect = 1 & lq = 1'? – Gang

Odpowiedz

0

Prostym pomysłem jest wysłanie go w postaci ciągu. Podobnie jak to w Java:

String a="[[4,7],[4,8]]"; 

W Pythonie, można po prostu użyć metody eval(), aby dostać go jako tablicy tablic. Jeśli chcesz to jako tablica krotek, użyj:

String a="[(4,7),(4,8)]"; 

Po prostu użyj składni python jako łańcucha. W Pythonie można użyć:

my_list=eval(a) 
print my_list[0] 

To da:

(4,7) 

jako wyjście dla ostatniego przykładu.

+1

Możesz także rozważyć użycie JSON. –

+0

problem polega na tym, że nie mogę zmienić kodu po stronie serwera –

1

Czy jest jakiś problem z [[4,7],[4,8]]? Większość operacji Pythona nie różni się krotkami od rzeczywistych list. A w Odoo jeszcze mniej. Myślę, że jest to właściwy sposób wysyłania listy krotek za pomocą języków, które nie implementują krotek. Tuple nie jest kluczową, wartościową rzeczą. Możesz mieć (a, b, c), która jest krotką. Jest to trochę podobne do [a, b, c]. Możesz iterować na obu. Możesz uzyskać ich wartość za pomocą indeksów (jeśli oba były przechowywane w zmiennej element, pobranie z niej a byłoby dla nich obu zgodne z .

Więc jeśli masz problem, nie sądzę, że chodzi o krotki i nie odpowiedziałeś na komentarz z pytaniem, czy jest błąd w wywołaniu XMLRPC. Domyślam się, że nie ma błędu. A jeśli wystąpił błąd, jestem pewien, że nie chodzi o krotki.

0

XML-RPC jest ograniczony. Tak więc istnieje tylko jeden typ dla listy i krotki. Jeśli spojrzysz na dokumenty dla odoo, zobaczysz, że zarówno krotki, jak i listy w przykładach Pythona zmieniają się na Arrays.asList w Javie. Tak więc, jeśli pojawi się błąd, istnieje duże prawdopodobieństwo, że coś innego jest nie tak

0

Czy próbowałeś używać klasy Apache? Docs.

Po prostu wykonałem szybki test i wygląda na to, co chcesz.

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

Domyślny serializator powinien wyprowadzić parę [] w oczekiwanym formacie [(1,2), ...].

0

Po długim poszukiwaniu otrzymałem rozwiązanie. Postanowiłem więc wyraźnie odpowiedzieć na to pytanie. Moja odpowiedź jest najprawdopodobniej od strony odoo. Do tej pory nie znalazłem sposobu na serializację tej struktury. Ale ramka odo akceptowane krotki w następujący sposób:

[ [ 4, [7,8] ] 

lub

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

Jest to odpowiednik:

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

nadzieję, że to pomoże ktoś.