Ominięcie labelki dla property w jsonie

0

Mma taka strukture klasy, ktora jest odwzorowywana do jsona:

class A {
@xmlElement("aa")
int a;
@xmlElement("bb")
B b;
...
}

json wyglda mniej wiecej tak:

data : {
  aa : a,
  bb: {
     i tu pola z klasy B
 }

}

czy da się zrobić jakoś, aby bez wyciągania elementów z klasy B do klasy A (zostawiając zawieranie), pozbyć siętego zagnieżdzenia ( bb: { } ), tak żeby struktura byla plaska:

data : {
  aa : a,
  i tu pola z klasy B (bez dodatkowego zagniezdzenia)
 

}
0

zawsze możesz inaczej nazwać klucz, np. "

"data" : {
  "aa" : a,
  "@bb.name": "kowalski",
  "@bb.age": 38
}

a potem transformować tego JSONa, i z płaskiej struktury ręcznie generować z powrotem drzewo (za pomocą sprawdzania, czy klucz zaczyna się od małpy, a później dokonania operacji split wg znaku kropka). O ile masz potrzebę, żeby tak robić.

inny pomysł to trzymać wszystkie obiekty w jednym słowniku, a odnosić się do nich przez stringi:

{
  "data" : {
      "name": "Jan Kowalski",
      "children": ["aa", "bb", "kowalskiFTW"]
   },
  "aa": {
      "something": 3
  },
  "bb": {
     "bla": 4
  },
   "kowalskiFTW": {
   }
}

i w momencie załadowania JSONa można go poddać transformacji w jakimś interceptorze (przynajmniej w AngularJS, w którym pracowałem, by się to nazywało interceptorem). Tylko, że nie napisałeś co chcesz osiągnać. A tak można wymyślać naprawdę 100 różnych sposobów na zabawę z JSONem.

jeszcze możesz zrobić mixina po prostu i wrzucić wszystkie właściwości razem.

Ale przede wszystkim co chcesz zrobić? I po co? Przypuszczam, żeby ułatwić sobie iterację i zamiast przechodzenia rekurencyjnego przez drzewo trzymać obiekty w płaskiej liście czy słowniku?

0

Podstawowe pytanie, czego używasz do serializacji do JSON'a? Jackson ma do tego czego potrzebujesz adnotację @JsonUnwrapped oznaczasz nią pole b w obiekcie A i po sprawie

0

Trochę się nie zrozumieliśmy, chaotycznie też napisałem.

Zaczytuję dane z bazy do encji. Encja ta później jest serializowana do jsona. I wszystko by bylo ladnie i pieknie :

"name" : name
"desc" : desc
"val" :
avg...
min...

Tylko "góra" sobie zazyczyla, aby dla wartosci z outputu resta nie bylo tego zagniezdzenia (z "val") tylko od razu wartosci avg, min... itd. (troche glupie zyczenie, no ale co zrobic...)

I tak sie teraz zastanaiwam, czy w kazdym wraperze musze pozbyc sie zawierania i wyciagnac te "cztery lcizby" bezposrednio do wrappera (aby REST po serializcji zwracal plaska strukture), czy moze mozna jakos to latwiej zrobic...

0

ok, wlasnie tego potrzebuje:

Annotation used to indicate that a property should be serialized "unwrapped"; that is, if it would be serialized as JSON Object, its properties are instead included as properties of its containing Object. For example, consider case of POJO like:

public class Parent {
public int age;
public Name name;
}
public class Name {
public String first, last;
}

which would normally be serialized as follows (assuming @JsonUnwrapped had no effect):

{
"age" : 18,
"name" : {
"first" : "Joey",
"last" : "Sixpack"
}
}

can be changed to this:

{
"age" : 18,
"first" : "Joey",
"last" : "Sixpack"
}

by changing Parent class to:

public class Parent {
public int age;
@JsonUnwrapped
public Name name;
}

Annotation can only be added to properties, and not classes, as it is contextual.

0

dziwne bo cos to nie dziala u mnie, dodanie @JsonUnwrapped powoduje ze klasa oznaczona ta adnotacja w mojej sytuacji w ogole nie jest serializowana

1 użytkowników online, w tym zalogowanych: 0, gości: 1