1

So I have this json object where the structure is variable depending on how you retrieve the data. Lets say the object looks like this in one case:

{
  "status": "success",
  "data": {
    "users": [...]
  }
}

but looks like this in another case:

{
  "status": "success",
  "data": {
    "posts": [...]
  }
}

Now for the first example, they way I am dynamically getting the data is like this:

var dataLocation = 'data.users';
var responseData;
eval('responseData = response.' +dataLocation + ';');

This allow me to configuration it. Just note that this is just a simple example, in the real code there is only one function to parse the data and I would be passed dataLocation in as a parameter.

Now my first question is whether or not there is a better want to accomplish the same goal without using eval?

If not, the second question is what do I need to do to the eval statement to make sure it is safe (dataLocation should never be passed in from a user, it will always come from code but still).

UPDATE

Based on the comment from Bergi, I am now using this:

var parts = dataListLocation.split('.');

for(var x = 0; x < parts.length; x += 1) {
  responseData = responseData[parts[x]];
}
2

2 Answers 2

2

You should use bracket notation instead of eval:

var responseData = response['data']['users'];

Note: from your description, what you have is a JavaScript object literal. A JSON would be that same object encoded as a string (with JSON.stringify, for example). There is no such thing as a "JSON object", you either have a JavaScript object, or a JSON string.

Sign up to request clarification or add additional context in comments.

Comments

0

You can use key indexers for objects in JS:

var responseData response.data['users]';

That is after getting rid of the data. in our dataLocation

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.