Arshanvit
Arshanvit

Reputation: 467

Ambiguous format output in nodejs

I am having output in following format as

"[{"a":"a1"},{"a":"a2"}]"

I want to actually extract it in array of json:

[
   {
      "a":"a1"
   },
   {
      "a":"a2"
   }
] 

How to convert it?

Upvotes: 0

Views: 74

Answers (3)

AurA
AurA

Reputation: 12363

I would suggest a different method which will get your work done without using any third party library.

var a = '[{"a":"a1"},{"a":"a2"}]';

var b = JSON.parse(a);

console.log(b);  // b will return [{"a":"a1"},{"a":"a2"}]

Another way which is eval function which is generally not recommended

var d = eval(a);

If you want to use JQuery instead use :

var c = $.parseJSON(a);

Upvotes: 0

Kristian Sakarisson
Kristian Sakarisson

Reputation: 31

Assuming your input contains the double quotes in the beginning and end, it is not possible to directly JSON.parse() the string.

In your case, you need to remove the first and last character (the double quotes) from your string before parsing it.

const unformattedString = '"[{"a":"a1"},{"a":"a2"}]"'

const formattedString = unformattedString.substr(1, unformattedString.length - 2)

const json = JSON.parse(formattedString)

The variable json now contains your JSON object.

Upvotes: 0

knolleary
knolleary

Reputation: 10117

You have tagged this with Node-RED - so my answer assumes that is the environment you are working in.

If you are passing a message to the Debug node and that is what you see in the Debug sidebar, that indicates your msg.payload is a String with the contents of [{"a":"a1"},{"a":"a2"}] - the Debug sidebar doesn't escape quotes when displaying strings like that.

So you likely already have exactly what you want - it just depends what you want to do with it next.

If you want to access the contents you need to parse it to a JavaScript Object. You can do this by passing your message through a JSON node.

Upvotes: 2

Related Questions