Java: Извлечение индекса src из нескольких массивов - PullRequest
0 голосов
/ 18 января 2019

Итак, я столкнулся с этой странной проблемой: я использую Woocommerce Rest API, и мне нужно получить src из массива "images".

Я уже пытался сохранить массив images в другом массиве, но тогда я понятия не имею, как получить "src" из массива:

try {
    ConnectionRequest r = new ConnectionRequest();
    r.setPost(false);
    r.setUrl("https://" + tokens.getShop_name_token() + ".ch/wp-json/wc/v3/products?consumer_key=" + tokens.getConsumer_key_token() + "&consumer_secret=" + tokens.getSecret_key_token());
    NetworkManager.getInstance().addToQueueAndWait(r);
    Map<String, Object> result = new JSONParser().parseJSON(new InputStreamReader(new ByteArrayInputStream(r.getResponseData()), "UTF-8"));

    //JSON Filter     
    ArrayList<Map<String, String>> myList = (ArrayList<Map<String, String>>) result.get("root");
    for (int i = 0; i < myList.size(); i++) {
        Map<String, String> dtls = myList.get(i);
        productsArr.add(dtls.get("name"));
        productStock.add(dtls.get("stock_status"));
        productDateCreated.add(dtls.get("date_created"));
        //TODO: Filter out image-soure
        productImages.add(dtls.get("images"));
    }
    System.out.println(productImages);

Вывод: [[], [], [], [{id = 16.0, date_created = 2018-11-08T15: 21: 14, date_created_gmt = 2018-11-08T15: 21: 14, date_modified = 2018-11-08T15: 21: 14, date_modified_gmt = 2018-11-08T15: 21: 14, src = https://website.com/wp-content/uploads/2018/11/1.jpg, name = Vneck Футболка, alt =}], [{id = 15.0, date_created = 2018-11-08T15: 21: 14, date_created_gmt = 2018-11-08T15: 21: 14, date_modified = 2018-11-08T15: 21: 14, date_modified_gmt = 2018-11-08T15: 21: 14, SRC = https://website.com/wp-content/uploads/2018/11/21.jpg, name = футболка, alt =}]]

Я получил это далеко. Теперь мой вопрос: как я могу отфильтровать индекс, чтобы получить "src" изображения?

1 Ответ

0 голосов
/ 18 января 2019

Поскольку вы используете довольно миниатюрный синтаксический анализатор com.codename1.io.JSONParser JSON, который анализирует JSON до Map<String, Object> и ничего больше, тогда вам нужно преобразовать Object, который вы получаете выберите значение для ожидаемого типа и повторите оттуда.

Если объект JSON верхнего уровня является массивом, то создается специальный элемент "root", который вы здесь получаете. Это означает, что структура вашего JSON анализируется следующим образом:

{
    "root": [
        {
            "name": <str>,
            "stock_status": <???>,
            "date_created": <str>,
            "images": 
                {
                    "id": <num>,
                    "date_*": <str>,
                    "src": <str>,
                    "name": <str>,
                    "alt": <str>
                }
            ]
        }
    ]
}

Итак, чтобы извлечь src изображения, вы извлекли массив "root" и перебрали его. Однако вместо того, чтобы приводить результаты к Map<String, String>, вы хотите сохранить их как Map<String, Object>:

for (const Map<String, Object> element : (List<Map<String, Object>>) result.get("root")) {
    // The "element" object has an "images" value that is a list of objects
    for (const Map<String, Object> image : (List<Map<String, Object>>) element.get("images")) {
        // Save the "src" field of each image
        productImages.add((String) image.get("src"));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...