2016-02-28 131 views
2

我有一个简单的PHP脚本,在后端使用json_encode方法输出字符串数组。它输出如下:如何正确地拆分字符串数组使用C#

["8090123","8090456","8090789","8090321","8090654"] 

现在,我想解析它在我的C#代码,但我似乎无法正确解析它。

下面是我的C#代码:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication5 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      using (WebClient wc = new WebClient()) 
      { 
       string myString = wc.DownloadString("https://magforex.biz/list.php"); 
       string[] words = myString.Split(','); 
       for (var i = 0; i < words.Length; i++) 
       { 
        // i just hardcoded the index for now 
        Console.WriteLine(words[0]); 
        break; 
       } 
       Console.ReadLine(); 
      } 
     } 
    } 
} 

代码运行得很好,但它输出以下结果["8090123"这不是我想要的东西。

对不起,我刚刚开始与C#和有限的知识。

我想要的只是字符串8090123,以便我可以稍后进行比较。

感谢您提前帮忙。

+1

使用JSON库像[JSON.NET(https://www.nuget.org/packages/Newtonsoft.Json/) –

+1

使用JSON库,你不想手动解析它。 – giannisf

回答

5

使用适当的JSON-解析库Newtonsoft.Json解析JSON字符串成静态类型的类模型:

string[] words = JsonConvert.DeserializeObject<string[]>(myString); 
+0

谢谢!我安装了库,它工作! – anagnam

1

为什么不做明显的事情和JSON解码您的JSON输入数据?使用Newtonsoft.Json:

JsonConvert.DeserializeObject<string[]>(myString)

0

您应将其更改为字[我]开始,然后我不确定你想要做什么。

+0

是的,我知道。我现在只是对索引进行硬编码,这样我就可以证明在我运行循环之前是否解析了正确的索引。谢谢;) – anagnam

+0

那么你可能想要words.Join() – MotKohn

+0

其确定。其他人建议的json库工作!无论如何,感谢;) – anagnam

2

你只是缺少一个步骤:

string[] words = myString.Trim(new []{'[',']'}).Split(','); 

老实说,除非你打算使用JsonConvert用于更复杂的对象图,使用JSON解串器在这种情况下,恕我直言,有点矫枉过正。

编辑:如果你不想引号,你可以使用LINQ投影...

string[] words = myString.Trim(new []{'[',']'}) 
        .Split(',') 
        .Select(s => s.Trim(new[]{'"'}).ToArray(); 

顺便说一句,我非常熟悉Json.NET,并已为ServiceStack家伙年龄。但是我更偏向于更简单的解决方案,因为,Occam's Razor,对吧?

+0

你可能是对的。它只是一个简单的数组,我想解析,所以我认为通过使用拆分方法将做到这一点。但建议的json库适用于我的直接需求。我不确定它是否适合我的简单任务。 – anagnam

+0

您刚才错过了'Trim'步骤来清理分割前的数据...... ;-) – code4life

+0

该方法仍然会在单个字符串周围留下引号,因此您需要一个循环来清除这些数据。使用JSON解析器是更好的方法。 –

1

如果您不想使用Newtonsoft库,则可以使用JavaScriptSerializer将字符串转换为数组。添加using System.Web.Script.Serialization;然后:

string myString = wc.DownloadString("https://magforex.biz/list.php"); 
JavaScriptSerializer js = new JavaScriptSerializer(); 
string[] myArray = js.Deserialize<string[]>(myString);