Ошибка публикации Jira - ожидается, что запятая разделит записи OBJECT

Я пытаюсь использовать приведенный ниже код для создания новой проблемы проекта в моей jira,

using using System.Text;
using System.Net.Http;
using System.Json;
using System.Web.Script.Serialization;

namespace Test
{
    class Class1
    {
        public void CreateIssue()
        {
            string message = "Hai \"!Hello\" ";
            string data = "{\"fields\":{\"project\":{\"key\":\"TP\"},\"summary\":\"" + message +    "\",\"issuetype\":{\"name\": \"Bug\"}}}";
            System.Net.Http.HttpClient client = new System.Net.Http.HttpClient();
            client.DefaultRequestHeaders.ExpectContinue = false;
            client.Timeout = TimeSpan.FromMinutes(90);
            byte[] crdential = UTF8Encoding.UTF8.GetBytes("adminName:adminPassword");
            client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(crdential));
            client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));     
            System.Net.Http.HttpContent content = new StringContent(data, Encoding.UTF8, "application/json");
            try
            {
                client.PostAsync("http://localhost:8080/rest/api/2/issue",content).ContinueWith(requesTask=>
                {
                    try
                    {
                        HttpResponseMessage response = requesTask.Result;
                        response.EnsureSuccessStatusCode();
                        response.Content.ReadAsStringAsync().ContinueWith(readTask =>
                        {
                            var out1 = readTask.Result;
                        });
                    }
                    catch (Exception exception)
                    {
                        Console.WriteLine(exception.StackTrace.ToString());
                        Console.ReadLine();
                    }
                });
            }
            catch (Exception exc)
            {
            }
        }
    }
}

Вызывает ошибку, как показано ниже:

"{\" errorMessages \ ": [\" Неожиданный символ ('!' (код 33)): ожидалось, что запятая разделит записи ОБЪЕКТА \ n в [Источник: org.apache.catalina.connector.CoyoteInputStream@1ac4eeea; строка: 1, столбец: 52] \ "]}"

Но я использую тот же файл json в Firefox Poster, я создал проблему.

Файл Json: {"fields": {"project": {"key": "TP"}, "summary": "Hai \"! Привет \ "", \ "issuetype \": {\ "name \": \"Ошибка\"}}}"

Итак, что не так с моим кодом?


person srinivasan r    schedule 03.05.2013    source источник


Ответы (1)


Похоже, есть проблемы с экранированием кавычек.

Вот красиво напечатанная версия переменной data после ее инициализации:

{
    "fields":{
        "project":{
            "key":"TP"
        },
        "summary":"Hai "!Hello" ",
        "issuetype":{
            "name": "Bug"
        }
    }
}

В сообщении об ошибке указано Unexpected character ('!')...was expecting comma.... Глядя на красиво напечатанную строку, становится понятна причина ошибки:

"summary":"Hai "!Hello" ",

Интерпретатор JSON, используемый JIRA, вероятно, анализирует этот текст следующим образом:

"summary":"Hai " ⇐ This trailing quotation mark ends the "summary" value
! ⇐ JSON expects a comma here
Hello" ", 

В вашем коде C # у вас есть это:

string message = "Hai \"!Hello\" ";

Кавычки перед восклицательным знаком экранируются обратной косой чертой. Однако это позволяет избежать кавычек только для компилятора C #. Когда компилятор C # завершит работу с ним, обратная косая черта исчезнет. Чтобы вставить кавычки в строку JSON, необходима обратная косая черта, за которой следует кавычка:

string message = "Hai \\\"!Hello\\\" ";

Чтобы избежать множества ошибок, связанных с форматированием JSON, я настоятельно рекомендую использовать класс Microsoft JavaScriptSerializer. Этот класс обеспечивает безопасный и быстрый способ создания действительного JSON:

using System;
using System.Collections.Generic;
using System.Web.Script.Serialization;

namespace JsonTests
{
    class Program
    {
        static void Main(string[] args)
        {
            string message = "Hai \"!Hello\" ";

            var project = new Dictionary<string, object>();
            project.Add("key", "TP");

            var issuetype = new Dictionary<string, object>();
            issuetype.Add("name", "Bug");

            var fields = new Dictionary<string, object>();
            fields.Add("project", project);
            fields.Add("summary", message);
            fields.Add("issuetype", issuetype);

            var dict = new Dictionary<string, object>();
            dict.Add("fields", fields);

            JavaScriptSerializer serializer = new JavaScriptSerializer();
            string json = serializer.Serialize((object)dict);
            Console.WriteLine(json);
        }
    }
}

Результат:

{"fields":{"project":{"key":"TP"},"summary":"Hai \"!Hello\" ","issuetype":{"name":"Bug"}}}
person Chad Nouis    schedule 03.05.2013