将逗号插入到两个括号接触的字符串中(C#)

时间:2017-06-24 01:25:05

标签: c# json string delimiter

我正在尝试用C#编写一个JSON文件,我有一个问题,我想用逗号(',')分隔每个对象,因为它是有效的JSON,但我无法弄清楚如何去做这个。我搜索了是否有一种方法可以搜索字符串中的特定模式(在我的例子中它将是'} {')并且正则表达式可能有效,但我不知道如何创建一个。

最终结果应该是

      '},{'

而不是

      '}{'.

到目前为止,这是我的代码:

    private void loopThroughArray()
    {
        string json = "";
            for (int i = 0; i < array.Count; i++)
            {
                MyObject t = array[i];
                json += new JavaScriptSerializer().Serialize(t);
                //this writes the json to the file but without comma seperator
            }

        System.IO.File.WriteAllText(@"<MyFilepath>\json.txt", "{\"json\":[" + json + "]}");
       //this writes the json to a file that and is in a json array called 'json' 

    }

7 个答案:

答案 0 :(得分:1)

根据@Measuring的建议,我查看了序列化JSON的不同方法,并发现这是我认为最简单的方法:

    json = JsonConvert.SerializeObject(MyObject);

完美无缺,谢谢@Measuring!

答案 1 :(得分:1)

我同意@Measuring当有this answer中确定的工具可供使用时,编写自己似乎过于复杂。

尽管如此,你可以做以下事情......

string json = "";
for (int i = 0; i < array.Count; i++){
    MyObject t = array[i];
    json += new JavaScriptSerializer().Serialize(t);
}

string pattern = "\}{\";
string replacement = "},{";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(json, replacement);

答案 2 :(得分:1)

您尝试做的事情可以通过string.Join和一点Linq来解决

var serializer = new JavaScriptSerializer();
var json = string.Join( ",", array.Select( e => serializer.Serialize(e) );

答案 3 :(得分:0)

看起来像这样:

json += new JavaScriptSerializer().Serialize(t);

正在创建{json object}。您的解决方案可能像添加,一样简单,如:

json += new JavaScriptSerializer().Serialize(t) + ",";

编辑(回复您的评论):
您可以通过内部检查轻松跳过最后一个循环。

json += new JavaScriptSerializer().Serialize(t);
if (i < array.Count - 1) json += ",";

或者,您可以将for-loop 1项目缩短,并在循环后添加最后一项。

答案 4 :(得分:0)

使用StringBuilder比使用+ =更有效,你应该避免在循环中创建可重用的对象。

尽可能接近您的代码,您可以尝试:

private void loopThroughArray()
{
   var serializer = new JavaScriptSerializer();
   var json = new System.Text.StringBuilder();
   for (int i = 0; i < array.Count; i++)
   {
      MyObject t = array[i];
      json.Append(serializer.Serialize(t));
      if (i < array.Count)
         json.Append(",");
   }
   System.IO.File.WriteAllText(@"<MyFilepath>\json.txt", "{\"json\":[" + json.ToString() + "]}");
}

但尝试可能更简单:

private void loopThroughArray()
{
   var serializer = new JavaScriptSerializer();
   var json = serializer.Serialize(array);
   System.IO.File.WriteAllText(@"<MyFilepath>\json.txt", "{\"json\":" + json.ToString() + "}");
}

但是,如果我这样做,我会在匿名类型上使用Json.Net的JsonConvert:

System.IO.File.WriteAllText(
    @"<MyFilepath>\json.txt",
    JsonConvert.SerializeObject(new {
        json = array
    }));

您可以从nuget获取Json.Net。

答案 5 :(得分:0)

JsonNet确实更容易使用,但在你的情况下感觉就像  JavaScriptSerializer工作正常。大概你期望“{json:[...]}”结果 - 序列化new {json = array}而不仅仅是array将产生输出:

var finalJson = new JavaScriptSerializer().Serialize(new {json = array});

附注:在构造JSON或XML时请避免手动字符串操作 - 这不值得付出努力,并且在大多数情况下导致结果有些错误。

答案 6 :(得分:0)

嗨Kevin不可能使用正则表达式替换字符串,

/}{/g

并替换为

},{