Получить стоимость предметов Json с Java Spring Boot - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь извлечь данные API из файла Json ниже. Я хочу получить «имя» каждого «элемента».

Как только «имя» будет получено, я хочу создать новый Json, который будет содержать: {name: "toto", name: "titi" ....}

Цель состоит в том, чтобы затем создать API на моей стороне, который при вызове с http://localhost/getitems вернет результат созданного Json.

Я новичок в Java и Spring Boot, так что если вы думаете, что есть код, который проще, дайте мне знать, я надеюсь, вы можете помочь мне легко создать этот новый Json файл. Спасибо!

// Json File (it has been reduced, more than 700 name are present)
{
    "kind": "Space",
    "apiVersion": "v1",
    "metadata": {
        "selfLink": "something",
        "resourceVersion": "something"
    },
    "items": [
        {
            "metadata": {
                "name": "projet1"                
            }
        },
        {
            "metadata": {
                "name": "com-cicd"
             }   
        }
    ]
}

// TestGet.java Class
public static NameSpaceJson getPostWithCustomHeaders(String DebutUrl, String MilieuUrl, String ParamUrl) {
        String url = DebutUrl.concat(MilieuUrl).concat(ParamUrl);
        String Bearer = "...";


        // create headers & template
        HttpHeaders headers = new HttpHeaders();
        RestTemplate restTemplate = new RestTemplate();

        // set `accept` header for the type of response
        headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));

        // set custom header, bearer here too
        headers.set("x-request-source", "desktop");
        headers.set("Authorization", "Bearer "+Bearer);

        // build the request
        @SuppressWarnings({ "rawtypes", "unchecked" })
        HttpEntity request = new HttpEntity(headers);

        // use `exchange` method for HTTP call, this one permits us to use bearer for auth
        ResponseEntity<NameSpaceJson> response = restTemplate.exchange(url, HttpMethod.GET, request, NameSpaceJson.class, 1);
        if(response.getStatusCode() == HttpStatus.OK) {
            return response.getBody();
        } else {
            return null;
        }
    }
// The name in the same file
public static void main(String[] args) {
        TestGet.disableSSLCertificateChecking();
        NameSpaceJson resultresponse = getPostWithCustomHeaders("https...","api","names");
//      Long response = resultresponse.getValue().getId();
        List<Item> response = resultresponse.getItems();

        String test = GenerateNewJsonNameSpace.createJsonContent(response);


        System.out.println(test);
    }
//NameSpaceJson.java File
package com.example.consumingrest;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class NameSpaceJson {

    private String kind;
    private String apiVersion;
    private List<Item> items;

    public String getKind() {
        return kind;
    }

    public void setKind(String kind) {
        this.kind = kind;
    }

    public String getApiVersion() {
        return apiVersion;
    }

    public void setApiVersion(String apiVersion) {
        this.apiVersion = apiVersion;
    }

    public List<Item> getItems() {
        return items;
    }

    public void setItems(List<Item> items) {
        this.items = items;
    }
}
//Metadata.java
package com.example.consumingrest;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class Metadata {

    private String name;
    private String creationTimestamp;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCreationTimestamp() {
        return creationTimestamp;
    }

    public void setCreationTimestamp(String creationTimestamp) {
        this.creationTimestamp = creationTimestamp;
    }
}
//Item.java
package com.example.consumingrest;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class Item {

    Metadata metadata;

    public Metadata getMetadata() {
        return metadata;
    }


    public void setMetadata(Metadata metadata) {
        this.metadata = metadata;
    }
}
// GenerateNewJsonNameSpace ( this is what i have tried.. but i'm sure we can do really better.. )
package com.example.consumingrest;

import java.util.List;

public class GenerateNewJsonNameSpace { 

    public static String createJsonContent(List<Item> ListOfNameSpace) {

        if(ListOfNameSpace.isEmpty()) {
            return null;
        }else {     
        String LeJson;
        LeJson = "{";
        for(int i = 0; i < ListOfNameSpace.size(); i++) {
            LeJson.concat(ListOfNameSpace.get(i).getMetadata().getName());
            LeJson.concat(", \n");
        }
        LeJson.concat("}");
        return LeJson;
        }


    }
}

1 Ответ

1 голос
/ 05 февраля 2020

вы можете использовать библиотеку с именем Gson, которая создана Google специально для обработки данных JSON.

Все, что вам нужно сделать, - это создать новый объект Gson и проанализировать JSON с ним , Вы можете сделать всего пару строк

String jsonString = "{ \"kind\": \"Space\", \"apiVersion\": \"v1\", \"metadata\": { \"selfLink\": \"something\", \"resourceVersion\": \"something\" }, \"items\": [ { \"metadata\": { \"name\": \"projet1\" } }, { \"metadata\": { \"name\": \"affeccom-cicd\" } } ] }";

    JsonObject data = new Gson().fromJson(jsonString, JsonObject.class);
    JsonArray names = data .get("items").getAsJsonArray();
    for(JsonElement element : names){
        JsonObject object = element.getAsJsonObject();
        System.out.println(object.get("metadata").getAsJsonObject().get("name").getAsString());
    }
...