0

I have a form that has a few multi-select choice fields. When I try to add an item, I get an unusual error below. I am using the Vue.js framework.

"value: "A node of type 'StartArray' was read from the JSON reader when trying to read a value of a property; however, a 'PrimitiveValue' or 'StartObject' node was expected."

Here's the code and the fields that are multi-select.

 $.ajax({
url: fullUrl,
method: "POST",
data: JSON.stringify({
  '__metadata': { 'type': 'SP.Data.RegistryListItem' },
  'Register': that.register,
  'RiskRegister': that.nextIndex,
  'Reopen': that.formatDate(that.reopen),
  'RiskOrIssue': that.riskOrIssue,
  'Status': that.status,               //<---multi-select choice field
  'ProblemT': that.probTitle,
  'ProblemStatement': that.problemStatement,
  'TaskOwner': that.taskOwner,
  'RiskOwner': that.riskOwner,
  'ResponseOwner': that.responseOwner    //<--- multi-select choice field
}),
headers: {
  "accept": "application/json;odata=verbose",
  "content-type": "application/json;odata=verbose",
  "X-RequestDigest": $("#__REQUESTDIGEST").val()
},
success: function(){
  alert("Item Added!");
},
error: function(data){
  console.log(data);
}   
});    

How can I solve this issue?

Thank you!

0

Try to set your multi-select choice fields in below format:

'Status': {'__metadata': {'type': 'Collection(Edm.String)'}, 'results':['Status 1', 'Status 2', 'Status 3']}

OR Simply try using:

'Status': { 'results':['Status 1', 'Status 2', 'Status 3'] }

Check my answer given at SharePoint Multiselect Choice field Saving using PnPjs for easy format.

Similar Questions:

  1. SP 2013 - Updating a multi-value lookup field via the REST API
  • I tried doing that but I get this error now value: "Incompatible type kinds were found. The type 'Collection(Edm.String)' was found to be of kind 'Collection' instead of the expected kind 'Primitive'." – OLA Nov 25 '19 at 0:31
  • Have you tried the 2nd/simple solution in my answer? Is data type of your column is Choice or Lookup field? – Ganesh Sanap Nov 25 '19 at 2:15
  • Yes I did. It's a choice field allowing multiple selections. 'Status': {'__metadata': {'type': 'Collection(Edm.String)'}, 'results':that.Status} that.Status is an array. Is that set up wrong? – OLA Nov 25 '19 at 3:39
  • If you are passing an array then check my answer given at: sharepoint.stackexchange.com/questions/267789/…. This should work for you. – Ganesh Sanap Nov 25 '19 at 3:46
  • Don't pass the type in metadata. Just pass the results array. – Ganesh Sanap Nov 25 '19 at 3:47
0

Sample test script:

<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script>
$(document).ready(function() {
CreateNew();
function CreateNew() {
    var listName = "11/25";

    CreateListItemWithDetails(listName, _spPageContextInfo.webAbsoluteUrl, function () {
        alert("New Item has been created successfully.");
}, function () {
     alert("Ooops, an error occured. Please try again.");
});
}

function CreateListItemWithDetails(listName, webUrl,  success, failure) {

    var item = {
        "__metadata": { "type": 'SP.Data.1125ListItem' },
        "OData__x0063_1":{"results": ['t1', 't2']}

    };

    $.ajax({
        url: _spPageContextInfo.siteAbsoluteUrl + "/_api/web/lists/getbytitle('" + listName + "')/items",
        type: "POST",
        contentType: "application/json;odata=verbose",
        data: JSON.stringify(item),
        headers: {
            "Accept": "application/json;odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val()
        },
        success: function (data) {

            success(data);
        },
        error: function (data) {
            failure(data);
        }
    });
}


})
</script>
  • I really appreciate your help on this. You are passing in a hard-codded array. I am passing in what I get from the multi-select drop down which is in this form in vue that.status. It holds the array values. Can the array be passed that way? I have everything you have, except how I pass the array but I get an error. – OLA Nov 27 '19 at 12:44
0

Here is an working example to set value of a Multi-select Choice field. Insert it in a Script Editor and test :

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
  SetMultiChoice();
});
function SetMultiChoice() {

var listName = "ListTitle";

 var itemDetails = {
    "__metadata": { "type": 'SP.Data.GZTickerListItem' },
    "Column_Internal_Name":{"results": ['A', 'B']}  // Multi Choice Column where A & B are the choices selected 

};
$.ajax({
    url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('" + listName + "')/items",
    type: "POST",
    contentType: "application/json;odata=verbose",
    data: JSON.stringify(itemDetails),
    headers: {
        "Accept": "application/json;odata=verbose",
        "X-RequestDigest": $("#__REQUESTDIGEST").val()
    },
    success: function (data) {

        //Perform Some Actions
    },
    error: function (data) {
        console.log(data);
    }
});
}

</script>

To get the _metadata value specific to your list use the below URL in your browser and search for ListItemEntityTypeFullName:

https://site-url/_api/web/lists/GetByTitle('ListName')/?$select=ListItemEntityTypeFullName

Let me know if this helps.

  • Is this correct? 'Status': {'__metadata': {'type': 'Collection(Edm.String)'}, 'results':that.Status} I get an error still. that.Status is an array from my multi select drop down – OLA Nov 25 '19 at 0:32
  • Is it different for SharePoint Online? – OLA Nov 25 '19 at 18:29
  • Tested it in my SharePoint online site and Updated the answer. Please check and let me know if this helps. – Ravi Nov 26 '19 at 6:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.