Home > Back-end >  get a key value pair from a String json (simple object)
get a key value pair from a String json (simple object)

Time:06-08

Im trying to get a key:value pair from a simple jsonString to add it after into a memory tab. If facing an issue cause my input is a string. and it looks like my loop isnot able to read the key value pair.

I read many topics about it, and im still in trouble with it. As you can see below

{"nom":"BRUN","prenom":"Albert","date_naiss":"10-10-1960","adr_email":"[email protected]","titre":"Mr","sexe":"F"}

and my method, find only on object... the result is the same in my loop

public static ArrayHandler jsonSimpleObjectToTab(String data) throws ParseException {
        if( data instanceof String) {
        final var jsonParser = new JSONParser();
        final var object = jsonParser.parse(data);
        final var array = new JSONArray();
        array.put(object);
        final var handler = new ArrayHandler("BW_funct_Struct");
        for( KeyValuePair element : array) {
            handler.addCell(element);
            Log.warn(handler);
        }
        return handler;
        } else {
            throw new IllegalArgumentException("jsonSimpleObjectToTab: do not support complex object"   data   "to Tab");
        }
    }

i also tryed before to type my array as a List, Object etc, without the keyValuePair object, i would appreciate some help.

Thanks again dear StackOverFlowers ;)

CodePudding user response:

You can try this :

const json = '{"nom":"BRUN","prenom":"Albert","date_naiss":"10-10-1960","adr_email":"[email protected]","titre":"Mr","sexe":"F"}';
 
map = new Map();
const obj = JSON.parse(json,(key,value) => {
     map.set(key,value)
});

and you'll have every pair stored in map

CodePudding user response:

Simply split the whole line at the commas and then split the resulting parts at the colon. This should give you the individual parts for your names and values.

Try:

supposing

String input = "\"nom\":\"BRUN\",\"prenom\":\"Albert\"";
  

then

String[] nameValuePairs = input.split(",");

for(String pair : nameValuePairs)
{
    String[] nameValue = pair.split(":");

    String name = nameValue[0]; // use it as you need it ...
    String value = nameValue[1]; // use it as you need it ...
}

CodePudding user response:

You can use TypeReference to convert to Map<String,String> so that you have key value pair.

String json = "{\"nom\":\"BRUN\",\"prenom\":\"Albert\",\"date_naiss\":\"10-10-1960\",\"adr_email\":\"[email protected]\",\"titre\":\"Mr\",\"sexe\":\"F\"}";
    ObjectMapper objectMapper = new ObjectMapper();
    TypeReference<Map<String,String>> typeReference = new TypeReference<Map<String, String>>() {
    };
    Map<String,String> map = objectMapper.readValue(json, typeReference);

CodePudding user response:

I just answered a very similar question. The gist of it is that you need to parse your Json String into some Object. In your case you can parse it to Map. Here is the link to the question with my answer. But here is a short version: you can use any Json library but the recommended ones would be Jackson Json (also known as faster XML) or Gson(by Google) Here is their user guide site. To parse your Json text to a class instance you can use ObjectMapper class which is part of Jackson-Json library. For example

public <T> T readValue(String content,
              TypeReference valueTypeRef)
            throws IOException,
                   JsonParseException,
                   JsonMappingException

See Javadoc. But also I may suggest a very simple JsonUtils class which is a thin wrapper over ObjectMapper class. Your code could be as simple as this:

Map<String, Object> map;    
try {   
        map = JsonUtils.readObjectFromJsonString(input , Map.class);
} catch(IOException ioe) {
       ....
}

Here is a Javadoc for JsonUtils class. This class is a part of MgntUtils open source library written and maintained by me. You can get it as Maven artifacts or from the Github

  • Related