【问题标题】:Getting strings between 2 characters C#获取2个字符之间的字符串C#
【发布时间】:2018-04-03 14:12:52
【问题描述】:

我有一个字符串,看起来像

{"BTC":{"USD":7358.8},"ETH":{"USD":402.78},"LTC":{"USD":125.37},"DASH":{"USD":335.73},"XMR":{"USD":187.2},"NXT":{"USD":0.1272},"ZEC":{"USD":204.82},"XRP":{"USD":0.5296},"WAVES":{"USD":4},"BCH":{"USD":705.74},"EOS":{"USD":5.89},"XLM":{"USD":0.229},"ADA":{"USD":0.1601},"NEO":{"USD":52.03},"IOT":{"USD":1.07}}

我想要的是名称(例如:BTC、ETH 等),我想在“:”之前和“””之后获取文本,并删除不必要的内容,但我真的没有知道这是否是一个好方法或如何去做。 任何帮助,将不胜感激。 谢谢!

【问题讨论】:

  • 这是JSON,用JSON.NET反序列化成一个对象就行了

标签: c# string


【解决方案1】:

字符串似乎是 JSON,所以为什么不按原样解析呢?

public class ExchangeRate
{
    public decimal USD { get; set; }
}

static class Program
{
    static void Main(string[] args)
    {
        string s = "{\"BTC\":{\"USD\":7358.8},\"ETH\":{\"USD\":402.78},\"LTC\":{\"USD\":125.37},\"DASH\":{\"USD\":335.73},\"XMR\":{\"USD\":187.2},\"NXT\":{\"USD\":0.1272},\"ZEC\":{\"USD\":204.82},\"XRP\":{\"USD\":0.5296},\"WAVES\":{\"USD\":4},\"BCH\":{\"USD\":705.74},\"EOS\":{\"USD\":5.89},\"XLM\":{\"USD\":0.229},\"ADA\":{\"USD\":0.1601},\"NEO\":{\"USD\":52.03},\"IOT\":{\"USD\":1.07}}";

        var er = JsonConvert.DeserializeObject<Dictionary<string, ExchangeRate>>(s);

        Console.ReadKey();
    }
}

如果您期望使用多种货币,您可以使用:

var er = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, decimal>>>(s);

相关:Easiest way to parse JSON response

【讨论】:

  • 是的,它是 JSON,但它将包含大约 100 个这样的条目,我必须手动编写你拥有的那个字符串,我认为这不是很有效。不过非常感谢!
  • @weaverbeaver 这不是它的工作原理,你的 JSON 来自哪里?底线是您的 JSON 完全是 Dictionary&lt;string, ExchangeRate&gt;,因此请使用 Patrick 所说的 JsonConvert.DeserializeObject 方法并将任何 JSON 字符串传递给它。如果您的 JSON 看起来不像您的示例,那么您需要提供 minimal reproducible example
  • 已解决,非常感谢,对于新手问题感到抱歉。
【解决方案2】:

我相信您正在尝试使用某些crypto-currency 交易所的ticker API 来创建可能的桌面通知应用程序。几个月前我创建了一个,这就是我所做的:

  1. 使用json2csharp.com 网站将JSON 转换为C# 类。把它命名为JsonClass
  2. 在我的C# 项目中导入了Newtonsoft.Json 包。
  3. 使用以下代码初始化类

    JsonTextReader reader = new JsonTextReader(new StringReader(JsonString));
    if (reader.Read())
    {
        JsonSerializer serializer = new JsonSerializer();
        jsonClassObject = serializer.Deserialize<jsonClass>(reader);
    }
    

【讨论】:

  • JsonConvert 更容易使用。
  • 谢谢!也会试试的。
【解决方案3】:

来自您的评论:

我想要的是名称(例如:BTC、ETH 等)

听起来您只需要 JSON 的

考虑到这一点,您甚至不需要关心 JSON 是什么对象,只需关心它是 some 对象的字典。我们使用一点 LINQ 来选择所有的键和中提琴:

//Gives an List<string> that is a collection of all the coin names
List<string> coins = JsonConvert.DeserializeObject<Dictionary<string, object>>(someJson)
                .Select(x => x.Key)
                .ToList();

这会产生一个包含以下数据的List&lt;string&gt;

BTC,
ETH,
LTC,
DASH,
XMR,
NXT,
ZEC,
XRP,
WAVES,
BCH,
EOS,
XLM,
ADA,
NEO,
IOT

小提琴here

【讨论】:

  • 是的,这就是我想要的,这就是我所做的,有点。非常感谢!
猜你喜欢
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-09
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多