首页 > 解决方案 > 如何将这个带有字符串的复杂 json 转换为普通的 json 对象,如输出

问题描述

嗨,我的输入 json 是这样的,我想使用 lodash _.map 函数将其转换为预期的输出 [

    {
    "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\"}
    }]

上面的 json 有一个名为“qualityJsonString”的字段,这个对象是一个字符串 json,所以我面临着将这个字符串转换为正确的 json 格式的问题

我需要像下面这样的格式

{"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,
        .....
     }

  } 


}

请帮我把它变成这样,我试过 field.toJSON 但它没有转换完整的 JSON

标签: javascriptjsonlodash

解决方案


你需要解析它。

var json = {
    "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}}}"
    };

var parsedQualityJSON = $.parseJSON(json.qualityJsonString);
console.log(parsedQualityJSON);

在该示例中,parsedQualityJSON变量包含新的 json 对象。

我确实删除了您的 Json 字符串的第二部分,因为它的格式不正确,但是由于与第一个相比缺少数据,我认为那是因为您复制它的方式,如果不是这样的话您需要检查您使用的 Json 字符串的注释。


推荐阅读