'How can I sort a JSON file by an attribute in asec order?
I have two JSON files to compare, and one of the outputs isn't in the right order. In order to compare a json file with another, I need to sort it by the name attribute. However, I encountered many difficulties. Can anyone help me solve this issue?
Or Is there any way to sort the JsonFile 1 by attribute "name" is ascending order ( Expected output- JsonFile2)
I tried with jq -s .Json.json > out.json, No outputs. can I know how to pass thee jq to sort by attribute name ?
JsonFile1:
{
"responseStatus": "SUCCESS",
"data": {
"name": "reusable_text__v",
"object": "annotation_keywords__sys",
"label": "Reusable Text",
"label_plural": "Reusable Text",
"active": true,
"additional_type_validations": [],
"type_fields": [{
"required": true,
"source": "standard",
"name": "reusable_text_content__v"
},
{
"required": false,
"source": "standard",
"name": "reusable_text_type__v"
},
{
"required": false,
"source": "standard",
"name": "source_text_asset__v"
},
{
"required": false,
"source": "standard",
"name": "country__v"
},
{
"required": false,
"source": "standard",
"name": "create_from_annotation_id__sys"
},
{
"required": false,
"source": "standard",
"name": "create_from_annotation_source__sys"
},
{
"required": false,
"source": "standard",
"name": "product__v"
},
{
"required": false,
"source": "standard",
"name": "id"
},
{
"required": true,
"source": "standard",
"name": "name__v"
},
{
"required": true,
"source": "standard",
"name": "status__v"
},
{
"required": false,
"source": "standard",
"name": "created_by__v"
},
{
"required": false,
"source": "standard",
"name": "created_date__v"
},
{
"required": false,
"source": "standard",
"name": "modified_by__v"
},
{
"required": false,
"source": "standard",
"name": "modified_date__v"
},
{
"required": false,
"source": "system",
"name": "global_id__sys"
},
{
"required": false,
"source": "system",
"name": "link__sys"
},
{
"required": false,
"source": "standard",
"name": "object_type__v"
},
{
"required": true,
"source": "custom",
"name": "lifecycle__v"
},
{
"required": true,
"source": "custom",
"name": "state__v"
},
{
"required": false,
"source": "custom",
"name": "create_from_annotation_source_unbound__sys"
},
{
"required": false,
"source": "system",
"name": "state_stage_id__sys"
},
{
"required": false,
"source": "system",
"name": "stage__sys"
}
]
}
}
JsonFile2: (I need to sort previous json format by the name attribute in ascending order)
{
"responseStatus": "SUCCESS",
"data": {
"name": "reusable_text__c",
"object": "annotation_keywords__sys",
"label": "Reusable Text Asset",
"label_plural": "Reusable Text Assets",
"active": true,
"additional_type_validations": [],
"type_fields": [{
"required": false,
"source": "standard",
"name": "id"
},
{
"required": false,
"source": "standard",
"name": "object_type__v"
},
{
"required": true,
"source": "standard",
"name": "name__v"
},
{
"required": true,
"source": "standard",
"name": "status__v"
},
{
"required": false,
"source": "standard",
"name": "created_by__v"
},
{
"required": false,
"source": "standard",
"name": "created_date__v"
},
{
"required": false,
"source": "standard",
"name": "modified_by__v"
},
{
"required": false,
"source": "standard",
"name": "modified_date__v"
},
{
"required": false,
"source": "system",
"name": "global_id__sys"
},
{
"required": false,
"source": "system",
"name": "link__sys"
},
{
"required": true,
"source": "custom",
"name": "lifecycle__v"
},
{
"required": true,
"source": "custom",
"name": "state__v"
},
{
"required": true,
"source": "custom",
"name": "match_text__sys"
},
{
"required": false,
"source": "system",
"name": "state_stage_id__sys"
},
{
"required": false,
"source": "system",
"name": "stage__sys"
},
{
"required": true,
"source": "custom",
"name": "reusable_text_content__c"
},
{
"required": false,
"source": "custom",
"name": "create_from_annotation_source__sys"
},
{
"required": false,
"source": "custom",
"name": "create_from_annotation_id__sys"
},
{
"required": false,
"source": "custom",
"name": "reusable_text_type__c"
},
{
"required": false,
"source": "custom",
"name": "country__v"
},
{
"required": false,
"source": "custom",
"name": "product__v"
},
{
"required": false,
"source": "custom",
"name": "create_from_annotation_source_unbound__sys"
},
{
"required": false,
"source": "custom",
"name": "source_text_asset__c"
}
]
}
}
I tried JsonArray and JsonObject, but did not succeed in finding the correct solution
Solution 1:[1]
You can sort the array located at .data.type_fields by its object items' field .name using sort_by and the update operator |=.
jq '.data.type_fields |= sort_by(.name)' JsonFile1 > JsonFile2
However, when sorting your sample JsonFile1 that way, the resulting JSON does not look like your sample JsonFile2.
{
"responseStatus": "SUCCESS",
"data": {
"name": "reusable_text__v",
"object": "annotation_keywords__sys",
"label": "Reusable Text",
"label_plural": "Reusable Text",
"active": true,
"additional_type_validations": [],
"type_fields": [
{
"required": false,
"source": "standard",
"name": "country__v"
},
{
"required": false,
"source": "standard",
"name": "create_from_annotation_id__sys"
},
{
"required": false,
"source": "standard",
"name": "create_from_annotation_source__sys"
},
{
"required": false,
"source": "custom",
"name": "create_from_annotation_source_unbound__sys"
},
{
"required": false,
"source": "standard",
"name": "created_by__v"
},
{
"required": false,
"source": "standard",
"name": "created_date__v"
},
{
"required": false,
"source": "system",
"name": "global_id__sys"
},
{
"required": false,
"source": "standard",
"name": "id"
},
{
"required": true,
"source": "custom",
"name": "lifecycle__v"
},
{
"required": false,
"source": "system",
"name": "link__sys"
},
{
"required": false,
"source": "standard",
"name": "modified_by__v"
},
{
"required": false,
"source": "standard",
"name": "modified_date__v"
},
{
"required": true,
"source": "standard",
"name": "name__v"
},
{
"required": false,
"source": "standard",
"name": "object_type__v"
},
{
"required": false,
"source": "standard",
"name": "product__v"
},
{
"required": true,
"source": "standard",
"name": "reusable_text_content__v"
},
{
"required": false,
"source": "standard",
"name": "reusable_text_type__v"
},
{
"required": false,
"source": "standard",
"name": "source_text_asset__v"
},
{
"required": false,
"source": "system",
"name": "stage__sys"
},
{
"required": true,
"source": "custom",
"name": "state__v"
},
{
"required": false,
"source": "system",
"name": "state_stage_id__sys"
},
{
"required": true,
"source": "standard",
"name": "status__v"
}
]
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | pmf |
