in reply to Re^3: JSON error '"' expected, at character offset 1
in thread JSON error '"' expected, at character offset 1

ahah you got me on that one.

I finally succeed:
use strict; use warnings; use JSON; my $response = '{Id:"343410466704454908",Pseudo:Stan,Country:"PERL_REP +UBLIC",CountryId:1,CanRecieveImg:"true",Localization:"01",Localizatio +nId:859,Picto:"fille.gif",PictoId:0,Type:0,Sex:1,Comment:"biz",Age:22 +,Media:0,IsAd:false}'; $response =~s/([{:,])(\w+)([:,}])/$1"$2"$3/g; $response =~s/([{:,])(\w+)([:,}])/$1"$2"$3/g; print $response;
output :
{"Id":"343410466704454908","Pseudo":"Stan","Country":"PERL_REPUBLIC","CountryId":"1", "CanRecieveImg":"true","Localization":"01","LocalizationId":"859","Picto":"fille .gif","PictoId":"0","Type":"0","Sex":"1","Comment":"biz","Age":"22","Media":"0", "IsAd":"false"}
Still there two things I don't like :

The regex need to be called twice because unquoted words between : and , (eg Stan or 22) don't match, maybe because the : is alderly used for the rule words between , and :

$1 replaced all the pattern
ex : $response =~s/[{:,](\w+)[:,]/"$1"/g;
"Id""343410466704454908""Pseudo"Stan
So I used three capturing ( )

It's quit lame but it works.. If someone have something better...

Replies are listed 'Best First'.
Re^5: JSON error '"' expected, at character offset 1
by ikegami (Patriarch) on Jan 02, 2010 at 06:20 UTC

    The regex need to be called twice because unquoted words between : and , (eg Stan or 22) don't match

    You can solve that using

    $response =~s/([{:,])(\w+)(?=[:,}])/$1"$2"/g;

    In 5.10+, you can even do

    $response =~s/[{:,]\K(\w+)(?=[:,}])/"$1"/g;