Search code examples
javascriptarraysjsonobject

how to add an element inside a json array at the specific index in a repeating block?


I am trying to add element "delete:true" after each occurrence of "_rev " mentioned in the below sample request.

Original Request:

{
    "docs": [
        {
            "_id": "123",
            "_rev": "1-7836",
            },
        {
            "_id": "456",
            "_rev": "1-1192",
           }
         ]                         

}

Expected Request:

{
    "docs": [
        {
            "_id": "123",
            "_rev": "1-7836",
            "_deleted" :true
            },
        {
            "_id": "456",
            "_rev": "1-1192",
            "_deleted" :true
           }
         ]                         

}

When I tried the below code,the ""_deleted" :true" is getting inserted after the -rev element is closed. PFB for the same and suggest.

function main(params) {
for (var i = 0; i< params.docs.length; i++) {
for (var value in params.docs[i]) {
if(value == '_rev'  && params.docs[i]._rev ){ 
var string1 = JSON.stringify(params.docs[i]);
var str = ',';
var string2 = '"';
var string3 =str+string2+ '_deleted'+ string2+ ':' + "true" ;
var res =  string1 + string3  ;
}
}
}
}
  ######################
[
  "2018-01-23T09:44:23.568738362Z stdout:
  {\"_id\":\"123\",
  \"_rev\":\"1-7836\"},
  \"_deleted\":true"]

Solution

  • You can reference the not existing attribute directly and assign an value:

    #!/usr/bin/js
    
    var myJSON = { "docs": [ { "_id":"123", "_rev":"1-200" } ] }
    console.log(myJSON);
    myJSON.docs[0]["_deleted"]=true;
    console.log(myJSON);
    

    Output of example:

    # js append.js 
    { docs: [ { _id: '123', _rev: '1-200' } ] }
    { docs: [ { _id: '123', _rev: '1-200', _deleted: true } ] }
    

    Read the more extensive example here: Add new attribute (element) to JSON object using JavaScript

    So this might be a duplicate ...