Java Json Konwersja

Java Json Konwersja
B2
  • Rejestracja:około 4 lata
  • Ostatnio:7 miesięcy
  • Postów:22
0

Hey zwracam się z prośbą. Otóż na chwile obecną pobieram liste produktów z DB :
screenshot-20210802161357.png
Chciałbym usunąć z kazdego produktu wiersz z jego id i nie wiem w jaki sposób to wykonać. Dodam że tą liste posiadam w formacie json. Czy ktoś poratuje?

edytowany 1x, ostatnio: betowen27
AK
Co już osiągnąłeś, czyli pokaż kod
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
0

A w jakim formacie chcesz ją mieć docelowo?
(w podtekście - na pewno chodzi o javę?)


Bo C to najlepszy język, każdy uczeń ci to powie
AK
Bardzo głęboka wypowiedź
B2
Nie no to jest java, może nie do końca zrozumialem o co zapytałeś, jeżeli możesz to proszę sprecyzuj.
B2
  • Rejestracja:około 4 lata
  • Ostatnio:7 miesięcy
  • Postów:22
0

Na chwile obecną pobieram liste produktów i w pętli pojedyńczo chce dodawać produkty do baselinker-a. Te tzw parametry podaje w formacie json. Aby dodać pojedyńczy element muszę usunąć product_id gdyż służy on jedynie do update.

Kopiuj
public List<Product> getAllProductList() {
        return jpaProductsRepository.findAll().stream().map(Factory::toDomain).collect(Collectors.toList());
    }
    public void saveToBaseLinker() throws Exception {
        for (int i = 0; i <getAllProductList().size() ; i++) {
            ObjectMapper mapper = new ObjectMapper();
            ArrayList al = new ArrayList(getAllProductList());
            System.out.println(al);
            DocumentContext doc = JsonPath.parse(mapper.writeValueAsString(getAllProductList().get(i)));
            doc.delete("product_id:"+i);
            System.out.println(mapper.writeValueAsString(getAllProductList().get(i)));
            OkHttpClient client = new OkHttpClient().newBuilder()
                    .build();
            MediaType mediaType = MediaType.parse("text/plain");
            RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
                    .addFormDataPart("token", "3001881-3008391-EFE0EZIWCEMBLV0LR")
                    .addFormDataPart("method", "addProduct")
//                    .addFormDataPart("parameters", "{\"storage_id\": \"bl_1\",\"name\":\"konopka\",\"category_id\":222994}")
                    .addFormDataPart("parameters", mapper.writeValueAsString(getAllProductList().get(i)))
                    .build();
            Request request = new Request.Builder()
                    .url("https://api.baselinker.com/connector.php")
                    .method("POST", body)
                    .build();
            Response response = client.newCall(request).execute();
        }
    }
edytowany 2x, ostatnio: betowen27
AK
Oczywiście wiesz, jak my kochamy obrazki z kodem?
AK
Zresztą nie zawieracy wiodącej dla zagadnienia klasy
EP
@betowen27: Usuń token jeśli to coś publicznego
B2
@Ephyron: uciąłem go wystarczająco, dzięki ;)
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Silesia/Marki
  • Postów:5505
2

Po pierwsze to bardzo zły kod. Mam nadzieję że masz włączone cache dla JPA bo inaczej select dla getAllProductList() wykona się z 5 razy.

A merytorycznie odpowiadając - IMHO najlepiej by było jakbyś miał ProductDTO bez id


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
Zobacz pozostały 1 komentarz
B2
Czemu 5 razy jezeli biore pojedynczo elementy z tej listy, najpierw 1 pozniej 2 itd....
KamilAdam
Bo 5 razy wywołujesz getAllProductList() w tym kodzie gdzie starczyło by raz. Licząc w runtume ile razy wywołasz to będzie n*4+1, czyli jak masz 25 elementów w liście to tego selecta wywołasz 101 razy
KamilAdam
@AnyKtokolwiek: +1, ciekawe że op linijkę wyżej ma streama. Ciekawe skąd go wziął :P
AK
Się mu skopiowało
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
0

To co piszesz jest w rozbieżności z kodem (powstrzymuję się od słów po góralsku)

Twierdzisz, że źródłem jest JSON, w kodzie źródłem jest baza danych


Bo C to najlepszy język, każdy uczeń ci to powie
B2
Dobrze moze zle to opisalem, ale lista jest baza danych
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
3

Tak to jest, uczyć Springa kogoś, kto nie ugruntował ani algorytmiki, ani definiowania zagadnień, ani Javy (pętla for(int i, jak ja to kocham)


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 1x, ostatnio: AnyKtokolwiek
AK
I pomagać mu w zadaniach rekrutacyjnych
B2
To nie rekrutacyjne :V
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

@betowen27 zrób sobie i nam przyjemność i weź wydziel z tego metody jak człowiek. Np. zrób sobie osobną metodę submitProduct(ProductDTO dto) która zajmuje się tylko wysłaniem payloadu a ProductDTO to obiekt który zawiera tylko te pola które chcesz. Następnie zrób metodę Product convertToDTO(Product product) która bierze Product i zamienia go w ProductDTO. Na koniec twoja fukcja będzie wyglądać tak:

Kopiuj
jpaProductsRepository
    .findAll()
    .stream()
    .map(Factory::toDomain)
    .map(this::convertToDTO)
    .forEach(this::submitProduct);

Kolejny krok to powkładanie tych metod w należne im miejsca -> convertToDTO powinno być w klasie Product a submitProduct w jakimś BaselinerAPIClient


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 2x, ostatnio: Shalom

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.