Jira post error - expecting comma to separate OBJECT entries

srinivasan radhakrishnan
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
May 2, 2013

Hi,

I am trying to use the below code to create new project issue in my jira,


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)
            {
            }
        }
    }
}



It throws the issue like below:

"{\"errorMessages\":[\"Unexpected character ('!' (code 33)): was expecting comma to separate OBJECT entries\\n at [Source: org.apache.catalina.connector.CoyoteInputStream@1ac4eeea; line: 1, column: 52]\"]}"

But i use the same json file in Firefox Poster , i have created the issue.

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

1 answer

1 accepted

0 votes
Answer accepted
Penny Wyatt (On Leave to July 2021)
Atlassian Team
Atlassian Team members are employees working across the company in a wide variety of roles.
May 12, 2013

The issue is that you are not JSON-encoding the message when concatenating it into the string.

This line of Java:

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

Will put this value into memory:

Hai "!Hello"

And hence this line of Java:

string data = "{\"fields\":{\"project\":{\"key\":\"TP\"},\"summary\":\"" + message + "\",\"issuetype\":{\"name\": \"Bug\"}}}";

Will put this value into memory:

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

You can see there's a syntax error there in the summary part - the double quotes inside the message are breaking your JSON.

Rather than generating JSON by string concatenation, which is pretty much guaranteed to give you functionality and security issues, I recommend using a JSON library instead. We use Jersey in JIRA but any would do.

Suggest an answer

Log in or Sign up to answer