Search code examples
javascriptjsonlodash

How to convert this complex json with string inside to normal json object like out put


HI my input json is like this and i want convert this to expected output using lodash _.map function [

    {
    "img":"imageurl",
    "qualityJsonString": "{\"MorphoScore\":\"204\",\"AwareScore\":\"0\",\"QualityCategory\":\"Medium\",\"QualityAttributes\":{\"ISO\":{\"Tinted Glasses\":true,\"Horizontally Centered Face\":true,\"Hotspots\":true,\"Vertical Face Position\":false,\"Exposure\":false,\"Length of Head\":false,\"Sharpness\":true,\"Compliant\":false,\"Width of Head\":true,\"Uniform Lighting\":true,\"Greyscale  Profile\":true,\"Natural Skin Colour\":true,\"Frontal Pose\":true,\"Resolution\":false},\"Aware\":[{\"qualityParameter\":\"PERCENT_FACIAL_BRIGHTNESS\",\"qualityScore\":94.140625},{\"qualityParameter\":\"SMILE_LIKELIHOOD\",\"qualityScore\":7.766985283983502},{\"qualityParameter\":\"RIGHT_EYE_CLOSED_LIKELIHOOD\",\"qualityScore\":0.0},{\"qualityParameter\":\"DARK_GLASSES_LIKELIHOOD\",\"qualityScore\":0.0},{\"qualityParameter\":\"FACIAL_DYNAMIC_RANGE\",\"qualityScore\":7.912889336229961},{\"qualityParameter\":\"OFF_ANGLE_GAZE_LIKELIHOOD\",\"qualityScore\":19.230365753173473},{\"qualityParameter\":\"PERCENT_BACKGROUND_UNIFORMITY\",\"qualityScore\":3.373901808553242},{\"qualityParameter\":\"DEGREE_OF_ILLUMINATION_ASYMMETRY\",\"qualityScore\":67.58262728281615},{\"qualityParameter\":\"HEIGHT_TO_WIDTH_RATIO\",\"qualityScore\":1.2487562189054726},{\"qualityParameter\":\"DEGREE_OF_CLUTTER\",\"qualityScore\":3.373901808553242},{\"qualityParameter\":\"FACE_COUNT\"},{\"qualityParameter\":\"POSE_ANGLE_YAW\",\"qualityScore\":-1.655534847997771},{\"qualityParameter\":\"HAIR_COVERED_RIGHT_EYE_LIKELIHOOD\",\"qualityScore\":0.0},{\"qualityParameter\":\"LEFT_EYE_CLOSED_LIKELIHOOD\",\"qualityScore\":0.0},{\"qualityParameter\":\"PERCENT_FACIAL_SATURATION\",\"qualityScore\":1.3333333333333286},{\"qualityParameter\":\"REDEYE_LIKELIHOOD\",\"qualityScore\":0.0},{\"qualityParameter\":\"HEAD_HEIGHT_TO_IMAGE_HEIGHT_RATIO\",\"qualityScore\":0.9083665338645418},{\"qualityParameter\":\"MASK_LIKELIHOOD\",\"qualityScore\":66.04184751157408},{\"qualityParameter\":\"EYE_SEPARATION\",\"qualityScore\":71.55286507191728},{\"qualityParameter\":\"SHARPNESS_LIKELIHOOD\",\"qualityScore\":75.54344930211819},{\"qualityParameter\":\"JPEG_QUALITY_LEVEL\",\"qualityScore\":3.373901808553242},{\"qualityParameter\":\"FOCUS_LIKELIHOOD\",\"qualityScore\":82.07793032254156},{\"qualityParameter\":\"EYE_AXIS_ANGLE\",\"qualityScore\":2.2025981617658053},{\"qualityParameter\":\"BACKGROUND_PAD_TYPE\",\"qualityScore\":3.373901808553242},{\"qualityParameter\":\"CENTERLINE_LOCATION_RATIO\",\"qualityScore\":0.48880597014925375},{\"qualityParameter\":\"J2K_ROI_FOREGROUND_COMPRESSION_RATIO\",\"qualityScore\":3.373901808553242},{\"qualityParameter\":\"LEFT_EYE_VALID_LIKELIHOOD\",\"qualityScore\":76.16672180697158},{\"qualityParameter\":\"HAIR_COVERED_LEFT_EYE_LIKELIHOOD\",\"qualityScore\":0.0},{\"qualityParameter\":\"FOREHEAD_COVERING_LIKELIHOOD\",\"qualityScore\":3.373901808553242},{\"qualityParameter\":\"GLASSES_LIKELIHOOD\",\"qualityScore\":2.7458807359307684},{\"qualityParameter\":\"HEAVY_FRAMES_LIKELIHOOD\",\"qualityScore\":0.0},{\"qualityParameter\":\"GLARE_LIKELIHOOD\",\"qualityScore\":0.0},{\"qualityParameter\":\"IMAGE_WIDTH_TO_HEAD_WIDTH_RATIO\",\"qualityScore\":1.4055944055944056},{\"qualityParameter\":\"POSE_ANGLE_PITCH\",\"qualityScore\":-1.1384115595433095},{\"qualityParameter\":\"RIGHT_EYE_VALID_LIKELIHOOD\",\"qualityScore\":75.0017445765546},{\"qualityParameter\":\"BRIGHTNESS_SCORE\",\"qualityScore\":100.0},{\"qualityParameter\":\"J2K_ROI_BACKGROUND_COMPRESSION_RATIO\",\"qualityScore\":3.373901808553242},{\"qualityParameter\":\"BACKGROUND_TYPE\",\"qualityScore\":3.373901808553242},{\"qualityParameter\":\"UNNATURAL_COLOR_LIKELIHOOD\",\"qualityScore\":8.087372947615322},{\"qualityParameter\":\"NUMBER_CHANNELS\",\"qualityScore\":3.0},{\"qualityParameter\":\"SHADOWS_LIKELIHOOD\",\"qualityScore\":7.169740789649495},{\"qualityParameter\":\"EYE_CONTRAST\",\"qualityScore\":87.5},{\"qualityParameter\":\"PERCENT_BACKGROUND_GRAY\",\"qualityScore\":3.373901808553242},{\"qualityParameter\":\"EYE_AXIS_LOCATION_RATIO\",\"qualityScore\":0.6180278884462151},{\"qualityParameter\":\"IMAGE_FORMAT\",\"qualityScore\":4.0},{\"qualityParameter\":\"J2K_COMPRESSION_RATIO\",\"qualityScore\":3.373901808553242}],\"ISOBestPractice\":{\"Mouth Closed Best Practice\":true,\"Eyes not Red  Best Practice\":true,\"Eyes Gaze Best Practice\":true,\"Resolution Best Practice\":false,\"Uniform Background Best Practice\":false,\"Frontal Pose Best Practice\":true,\"Width of Head Best Practice\":true,\"Length of Head Best Practice\":false,\"Eyes Open Best Practice\":true,\"Compliant Best Practice\":false,\"Image Width to Height Best Practice\":true},\"ICAO\":{\"No Dark Lenses and no heavy frames and no glares\":true,\"Natural skin tones\":true,\"Facing square on to the camera\":true,\"Face coverage upto 70ָ0% of the photograph\":false,\"Colour neutral\":true,\"No image more than 6-months old\":true,\"Uniform lighting and no shadows\":true,\"Compliant\":false,\"Plain light-coloured background\":false,\"Eye Separation\":false,\"Forehead coverage and Mask Detection\":true,\"One face in image and no smile\":true,\"Sharp and Focus\":true,\"Brightness and Contrast\":false,\"Looking directly at the camera\":true,\"Eyes open and clearly visible\":true},\"DepartmentStandard\":{\"Has Natural Skin Colour\":true,\"Mouth Closed\":true,\"Good Vertical Face Position\":false,\"Horizontally Centered Face\":true,\"Eyes not Red\":true,\"Length of Head\":false,\"Compliant\":false,\"Eyes Open\":true,\"Width of Head\":true,\"No Tinted Glasses\":false,\"Good Exposure\":false,\"Good Greyscale\":true,\"No Hotspots\":true,\"Frontal Pose\":true,\"One Face\":true,\"Resolution\":false}}}"
    },{

        "img":"imageurl",
    "qualityJsonString": "{\"MorphoScore\":\"204\"}
    }]

Above json have field called "qualityJsonString" this object is a string json so am facing issue to convert this string to proper json format

and i need out put json like this below format

{"img":"image url",
  "QualityAttributes": {
    "ISO":{
     "Tinted Glasses":true,
      ......
     },
     "ISOBestPractice":{
        "Mouth Closed Best Practice":true,
         ......
     },
     "ICAO":{
        "No Dark Lenses and no heavy frames and no glares":true,
         ......
     },
     "DepartmentStandard":{
        "Has Natural Skin Colour":true,
        .....
     }

  } 


},
{"img":"image url",
  "QualityAttributes": {
    "ISO":{
     "Tinted Glasses":true,
      ......
     },
     "ISOBestPractice":{
        "Mouth Closed Best Practice":true,
         ......
     },
     "ICAO":{
        "No Dark Lenses and no heavy frames and no glares":true,
         ......
     },
     "DepartmentStandard":{
        "Has Natural Skin Colour":true,
        .....
     }

  } 


}

Please help me to make it like this, i tried field.toJSON but its not converting full jSON


Solution

  • I have parsed your input JSON at here Parsed Json by removing errors.

    The following lodash code will give you the desired output.

    _.map(myInputArray, (element) => (
        {
           img: element.img, 
           QualityAttributes: element.qualityJsonString.QualityAttributes
        }));