ajsie
ajsie

Reputation: 79686

Convert '{key1=value1, key2=value2}' format into an object

I have some strings having a format like this:

'{key1=value1, key2=value2}'

What's the best way to convert a string with this format into a JavaScript object?

Thanks!

Upvotes: 0

Views: 2795

Answers (4)

sinsedrix
sinsedrix

Reputation: 4775

It's almost JSON you could parse:

JSON.parse('{key1=value1, key2=value2}'.replace(/=/g,":"))

EDIT With keys as strings (thx @MattGreer):

JSON.parse('{key1=value1, key2=value2}'.replace(/(\w+)=/g, '"$1":'))

EDIT With values as strings (thx @ajsie):

JSON.parse('{key1=value1, key2=value2}'.replace(/(\w+)=(\w+)/g, '"$1":"$2"'))

Upvotes: 3

osahyoun
osahyoun

Reputation: 5231

This could work. Not tested though.

var data = '{key1=value1, key2=value2}',
    values = data.match(/\w+=\w+/g),
    newObject = {},
    i, value;

for (i=0; i < values.length; i++) {
  value = values[i].split('=');
  newObject[value[0]] = value[1] ;
};

Upvotes: 1

Larry K
Larry K

Reputation: 49104

If the values are numbers, not strings, and the info came from a trusted source, then you could simply eval the string.

If the values can contain strings then you'll need to parse it.

Added: oops, I forgot that the key/value separator is a colon, not an equals. @sinsedrix solution is good, except that you need to eval it since it still isn't valid JSON. (JSON requires that the keys be strings, not bare-words.)

Upvotes: 0

Matt Greer
Matt Greer

Reputation: 62027

In that format nothing built in will help you. That's not quite a valid object literal, so eval will fail (eval should be avoided anyway), and it's not quite a JSON string, so JSON.parse will fail too. Can you massage the format? If you could get it to be {"key1": value1, "key2": value2 }, then both of the things I mentioned would work out of the box. JSON.parse in particular would be good:

var resultingObject = JSON.parse('{"key1": value1, "key2": value2 }')

It will (probably) be easier to massage the data into a valid JSON format than try and write your own parser. But if you have no choice on the format, a parser is probably your only option.

In desperation, a crude function to convert the format to JSON through brute force (replace all '=' with ':', wrap the keys in quotes, probably via a regex) would work, but it'd be brittle.

Upvotes: 0

Related Questions