Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to iterate over a JSONArray in java 8

I have the following code which is using a for loop to iterate over the elements in a JSONArray.

import org.apache.log4j.Logger;
import org.json.JSONArray;
import org.json.JSONObject;

import java.util.stream.IntStream;
    public class Pmt {
    private String[] patchInformation_svnRevisionpublic;
    private final Logger logger = Logger.getLogger(Pmt.class.getName());

        private static final String COMMITS_IN_PATCH_IDENTIFIER = "patchInformation_svnRevisionpublic";  //key used to identify the commits in a patch from JSON response received from PMT
        private static final String KEY_STRING = "name";
        private static final String VALUE_STRING = "value";

         public String[] getPublicGitCommitHashes(JSONArray jsonArray) {

            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jsonObject = (JSONObject) jsonArray.get(i);
                String tempName = (String) jsonObject.get(KEY_STRING);
                if (tempName.equals(COMMITS_IN_PATCH_IDENTIFIER)) {
                    JSONArray tempCommitsJSONArray = (JSONArray) jsonObject.get(VALUE_STRING);
                    //initializing the patchInformation_svnRevisionpublic array
                    patchInformation_svnRevisionpublic = new String[tempCommitsJSONArray.length()];
                    // for ommiting the white spaces at the begingin and end of the commits
                    IntStream.range(0, tempCommitsJSONArray.length()).forEach(j -> patchInformation_svnRevisionpublic[j] = ((String) tempCommitsJSONArray.get(j)).trim());

                    logger.info(" The commits hashes obtained from WSO2 PMT are successfully saved to an array");

                    System.out.println("The commit Ids are");
                    //            for printing all the commits ID associated with a patch
                    IntStream.range(0, patchInformation_svnRevisionpublic.length).mapToObj(i1 -> patchInformation_svnRevisionpublic[i1]).forEach(System.out::println);
                    System.out.println();
                    break;
                }
            }
            //to prevent from internaal representation by returning referecnce to mutable object
            String clonedPatchInformation_svnRevisionpublic[] = patchInformation_svnRevisionpublic.clone();
            return clonedPatchInformation_svnRevisionpublic;
        }
    }

How do I use the new features in Java 8 like streams API or forEach to perform the same task. Thanks in advance

like image 380
Kasun Siyambalapitiya Avatar asked Mar 17 '17 10:03

Kasun Siyambalapitiya


People also ask

How do I iterate through a JSONArray?

1) Create a Maven project and add json dependency in POM. xml file. 2) Create a string of JSON data which we convert into JSON object to manipulate its data. 3) After that, we get the JSON Array from the JSON Object using getJSONArray() method and store it into a variable of type JSONArray.

How do I iterate over a JSON object?

getJSONObject("JObjects"); JSONArray getArray = getObject. getJSONArray("JArray1"); for(int i = 0; i < getArray. size(); i++) { JSONObject objects = getArray. getJSONArray(i); //Iterate through the elements of the array i. //Get thier value. //Get the value for the first element and the value for the last element. }

How do I iterate JSONArray in groovy?

Use that to create a JSON array. You then loop through the array for (int i = 0; i < array. length(); i++) and retrieve each JSON object by calling array. getJSONObject(i); which returns JSONObject .

How do I read JSONArray?

String value = (String) jsonObject. get("key_name"); Just like other element retrieve the json array using the get() method into the JSONArray object.


1 Answers

This is equivalent of or code in Java 8 stream API. Not 100% equivalent, but you can get the main idea.

private static final String COMMITS_IN_PATCH_IDENTIFIER = "patchInformation_svnRevisionpublic";  //key used to identify the commits in a patch from JSON response received from PMT
private static final String KEY_STRING = "name";
private static final String VALUE_STRING = "value";

public List<String> getCommitIds (JSONArray array) {
     return arrayToStream(array)
            .map(JSONObject.class::cast)
            .filter(o -> o.get(KEY_STRING).equals(COMMITS_IN_PATCH_IDENTIFIER))
            .findFirst()
            .map(o -> (JSONArray) o.get(VALUE_STRING))
            .map(Main::arrayToStream)
            .map(commits ->
                    commits.map(Object::toString)
                            .map(String::trim)
                            .collect(Collectors.toList())
            )
            .orElseGet(Collections::emptyList);
}

@Nonnull
private static Stream<Object> arrayToStream(JSONArray array) {
    return StreamSupport.stream(array.spliterator(), false);
}
like image 132
Dmitry Zvorygin Avatar answered Oct 10 '22 14:10

Dmitry Zvorygin