Unescape JSON строка

#json #gson

#json #gson

Вопрос:

У меня есть служба .NET, которая возвращает экранированную строку JSON

 [
"{"uid":3298534883331,"id":"foo","name":"Foo Bar","address":{"uid":3298534883332,"city":"Shanghai","street":"Ke Yuan Street"}}",
"{"uid":3298534883333,"id":"foo","name":"Foo Bar","address":{"uid":3298534883334,"city":"Shanghai","street":"Ke Yuan Street"}}"
]
 

Со стороны Java я использую GSON, и он хочет иметь неэкранированный JSON

 [
{"uid":0,"id":"foo","name":"Foo Bar","address":{"uid":0,"city":"Shanghai","street":"Ke Yuan Street"}},
{"uid":0,"id":"foo","name":"Foo Bar","address":{"uid":0,"city":"Shanghai","street":"Ke Yuan Street"}}
]
 

Существует ли какая-либо стандартная процедура для отмены экранирования строки JSON?

Вот часть .NET

     [OperationContract]
    [WebGet(
        UriTemplate = "{Database}/{ContainerName}?query={tag}",
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json)]
    string[] Get(string database, string containerName, string tag);
 

Внутри он использует JSON.net

Java-клиент

     String json = webResource.
        queryParam("query", "id = 'foo' AND name = 'Foo Bar'").
        get(String.class);
 

Из отладчика Eclipse я вижу различия в двух строках: что генерирует GSON и что возвращается
Вы можете отметить дополнительный » для каждого объекта в начале и в конце

Комментарии:

1. Как вы показываете строку? Это действительно экранировано, или это просто то, что вы получаете от отладчика? Как вы возвращаете строку из своего. СЕТЕВОЕ приложение?

2. Обновлено сообщение с подробными сведениями о режиме

Ответ №1:

Кажется, что ваш сервер фактически возвращает массив строк:

 string[] Get(string database, string containerName, string tag);
 

и это именно то, что получает клиент:

 [
    "string 1",
    "string 2",
    ...
    "string N"
]
 

Вы должны вернуть массив объектов:

 MyClass[] Get(string database, string containerName, string tag);
 

и тогда вы получите что-то вроде:

 [
    {"MyProperty1": "value1_1", ..., "MyPropertyM": "value1_M"},
    {"MyProperty1": "value2_1", ..., "MyPropertyM": "value2_M"},
    ...
    {"MyProperty1": "valueN_1", ..., "MyPropertyM": "valueN_M"},
]
 

Будучи MyClass определен следующим образом:

 class MyClass
{
    public string MyProperty1 { get; set; }
    public string MyProperty2 { get; set; }
    ...
    public string MyPropertyM { get; set; }
}