If you have the complete JSON string in 1 Plain Text attribute, the following will parse it and give you the lat and lng.
Assuming you have a BO called GPSreply with a your JSON string in a Plain Text attribute called JSONreply.
You will need 3 more Plan Text attributes:
TempResult to hold the data after some initial parsing
lat and lng to hold the parsed out latitude and longitude
The following rules will parse you JSON.
Rule 1. I tested this by copying your JSON above into my BO attribute and it contained new line characters. This rule will remove those. If your actual JSON response is 1 long string with no new line characters, this rule may be skipped.
GPSreply.JSONreply=REPLACE_PATTERN(GPSreply.JSONreply, CR(), '')
Rule 2: Remove unneeded JSON. This will remove most of the JSON before and after the lat and lng and store what is left in the TempResult.
GPSreply.TempResult=REPLACE_PATTERN(REPLACE_PATTERN(GPSreply.JSONreply, '^.*location\x22 : \{', ''), '\}.*$', '')
Rules 3 and 4. Both of these rules populate the lat and lng from the data in TempResult. 2 rules are needed if it is possible for the lng to come before the lat. If lat is always before the lng, only rule 3 is needed.
Rule 3. lat comes before lng
IF MATCHES(GPSreply.TempResult, '^.*lat.*lng.*$')='Yes' Then
GPSreply.lat=REPLACE_PATTERN(REPLACE_PATTERN(GPSreply.TempResult, '^.*lat.*?: ', ''), ',.*$', '')
GPSreply.lng=TRIM(REPLACE_PATTERN(GPSreply.TempResult, '^.*lng.*:', ''))
Rule 4. lng comes before lat
IF MATCHES(GPSreply.TempResult, '^.*lng.*lat.*$')='Yes' Then
GPSreply.lng=REPLACE_PATTERN(REPLACE_PATTERN(GPSreply.TempResult, '^.*lng.*?: ', ''), ',.*$', '')
GPSreply.lat=TRIM(REPLACE_PATTERN(GPSreply.TempResult, '^.*lat.*:', ''))