Cart Licenses Contact Support Online Creator Log in/Register
Try
Buy
v 1.9.50

Access Survey Results

This help topic describes how you can access, modify, and display individual question values and full survey results.

Access Individual Question Values

To access an individual question value, use the question's value property. You can assign a new value to it if you want to update the question value programmatically. Alternatively, you can call the Survey's getValue(questionName) and setValue(questionName, newValue) methods.

The following code configures an nps_score question and uses the API members described above to access the question's value:

import { Model } from "survey-core";

const surveyJson = {
  "elements": [{
    "type": "rating",
    "name": "nps_score",
    "title": "On a scale of zero to ten, how likely are you to recommend our product to a friend or colleague?",
    "rateMin": 0,
    "rateMax": 10,
  }]
};
const survey = new Model(surveyJson);
const npsQuestion = survey.getQuestionByName("nps_score");

console.log(npsQuestion.value);
// ===== or =====
// console.log(survey.getValue("nps_score"));

npsQuestion.value = 10;
// ===== or =====
// console.log(survey.setValue("nps_score", 10));

If you need to access an individual question value before or immediately after it is changed, handle the Survey's onValueChanging or onValueChanged events:

survey.onValueChanging.add((survey, { name, question, oldValue, value }) => {
  console.log(`The ${name} question value is about to change from ${oldValue} to ${value}.`);
  // You can redefine the `value` argument if you want to change the question value:
  // value = myNewValue;
});

survey.onValueChanged.add((survey, { name, question, value }) => {
  console.log(`The ${name} question value has changed to ${value}.`);
});

Access Full Survey Results

To access full survey results, use the Survey's data property. It contains a JSON object with answered questions and has the following structure:

{
  "question1Name": "question1Value",
  "question2Name": "question2Value",
  // ...
  "questionNName": "questionNValue",
}

Depending on the question type, question values can also be nested objects or arrays that contain objects or primitive values:

{
  "question1Name": [ "value1", "value2", ... ],
  "question2Name": {
    "nestedQuestion1Name": "nestedQuestion1Value",
    "nestedQuestion2Name": "nestedQuestion2Value",
    // ...
  },
  // ...
}

The following code outputs the data property into the browser's console:

import { Model } from "survey-core";

const surveyJson = { ... };
const survey = new Model(surveyJson);

console.log(survey.data);

If you need to get survey results as an array of JavaScript objects, call the Survey's getPlainData() method. The objects in the array have the following structure:

{
  name: String, // Question name
  title: String, // Question title
  value: any, // Question value
  displayValue: String, // Question value converted to a string
  isNode: Boolean, // `true` if the question contains more than one value
  // Details about the values. Present only if `isNode` is `true`
  data: Array<{ name, title, value, displayValue, isNode, data}>
}

The following code shows how to call the getPlainData() method and output the result into the browser's console:

console.log(survey.getPlainData());

Modify Survey Results

The previous section described the default format of survey results. If you want to use a different format, modify survey results in a custom function. For example, you can bring survey result objects to the following structure:

{
  name: String, // Question name
  title: String, // Question title
  value: any, // Question value
  displayValue: String // Question value converted to a string
}

The code below converts survey results to this structure when a user completes the survey:

survey.onComplete.add((survey) => {
  const resultData = [];
  for (const key in survey.data) {
    const question = survey.getQuestionByName(key);
    if (!!question) {
      const item = {
        name: key,
        value: question.value,
        title: question.displayValue,
        displayValue: question.displayValue
      };
      resultData.push(item);
    }
  }
  return resultData;
});

See Also