C#正则表达式提取数据

小白xqr 2019-07-31 09:10:35
{"errno":0,"data":{"count":5,"datastreams":[{"datapoints":[{"at":"2019-07-28 17:58:31.518","value":1},{"at":"2019-07-28 17:58:27.530","value":1},{"at":"2019-07-28 17:58:23.520","value":1},{"at":"2019-07-28 17:58:19.684","value":1},{"at":"2019-07-28 17:58:15.748","value":1}],"id":"3325_0_5700"}]},"error":"succ"}
提取value值和at值用正则表达式应该是什么格式?求助大佬们!
...全文
1853 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
西北乱跑娃 2019-08-03
  • 打赏
  • 举报
回复
引用 5 楼 qq_42030926的回复:
[quote=引用 4 楼 XBodhi.的回复:]推荐你用 json 返回序列化成对象直接绑定。
有完整解决方案吗,新手真的很多地方都不懂,哭了[/quote] 用Python就行啦,哪有那么麻烦
小白xqr 2019-08-02
  • 打赏
  • 举报
回复
引用 26 楼 sinomac的回复:
我看你发了三个贴子相同问题啊,什么情况啊。你就是没理解JSON序列化和反序列化。我留意了一下,你有时会返回错误,那返回错误的时候对方反序列化成一个错误的实例,如果不是错误,那就反序列化为你OK的实体。然后用foreach把实体里的LIST<>里的值取出来,不就可以了?其实,你就是没有理解JSON的序列化和反序列化,然后不会取实体类的值。
对,你说的有道理,晕了
小白xqr 2019-08-02
  • 打赏
  • 举报
回复
引用 27 楼 sinomac的回复:
我看了你三个贴的要求,你的要求根本用不到正则。我发现你每次都是固定的,不是说每次返回原JSON结构不同。无非就是两种情况,一个是错误,一个是取到了值 。
用正则表达式是最直接最便捷的方法,json的话实体类也不用,每个jarry组也不一样,所以就用正则表达式了
小白xqr 2019-08-02
  • 打赏
  • 举报
回复
用正则表达式是最直接最便捷的方法,json的话实体类也不用,每个jarry组也不一样,所以就用正则表达式了
sinomac 2019-08-02
  • 打赏
  • 举报
回复
我看了你三个贴的要求,你的要求根本用不到正则。我发现你每次都是固定的,不是说每次返回原JSON结构不同。无非就是两种情况,一个是错误,一个是取到了值 。
sinomac 2019-08-02
  • 打赏
  • 举报
回复
我看你发了三个贴子相同问题啊,什么情况啊。你就是没理解JSON序列化和反序列化。我留意了一下,你有时会返回错误,那返回错误的时候对方反序列化成一个错误的实例,如果不是错误,那就反序列化为你OK的实体。然后用foreach把实体里的LIST<>里的值取出来,不就可以了?其实,你就是没有理解JSON的序列化和反序列化,然后不会取实体类的值。
小白xqr 2019-08-01
  • 打赏
  • 举报
回复
引用 1 楼 娃都会打酱油了的回复:

foreach(Match match in Regex.Matches(txt,@"""at"":""([^""]*)""[^""]*""value"":([^}]*)"))
{
match.Groups[1].Value //at
match.Groups[2].Value //value
}
大佬,加上id的话正则表达式应该怎么写☒☒☒
小白xqr 2019-08-01
  • 打赏
  • 举报
回复
引用 1 楼 娃都会打酱油了的回复:

foreach(Match match in Regex.Matches(txt,@"""at"":""([^""]*)""[^""]*""value"":([^}]*)"))
{
match.Groups[1].Value //at
match.Groups[2].Value //value
}
大佬,加上id的话正则表达式应该怎么写☒☒☒
小白xqr 2019-08-01
  • 打赏
  • 举报
回复
引用 1 楼 娃都会打酱油了的回复:

foreach(Match match in Regex.Matches(txt,@"""at"":""([^""]*)""[^""]*""value"":([^}]*)"))
{
match.Groups[1].Value //at
match.Groups[2].Value //value
}
大佬,加上id的话正则表达式应该怎么写
小白xqr 2019-07-31
  • 打赏
  • 举报
回复
//创建一个请求示例
HttpWebRequest request3 = (HttpWebRequest)HttpWebRequest.Create("http://api.heclouds.com/devices/527240946/datapoints?");

//添加头(设置api-key)
request3.Headers["api-key"] = "OguztSiBglhJiDO=49nPj3R1miE=";
//获取响应,即发送请求
HttpWebResponse response3 = (HttpWebResponse)request3.GetResponse();
Stream responseStream3 = response3.GetResponseStream();
StreamReader streamReader3 = new StreamReader(responseStream3, Encoding.UTF8);

//读取响应
string str3 = streamReader3.ReadToEnd();

var jObj = (JObject)JsonConvert.DeserializeObject(str3);
var dataArray = jObj["data"]["datastreams"] as JArray;

if (dataArray != null)
{
foreach (JObject obj in dataArray)
{
var streamArray = obj["datapoints"] as JArray;
if (streamArray != null)
{
foreach (JObject end in streamArray)
{
string a1 = string.Format("{0} {1}", end["at"], end["value"]);
string t1 = string.Format("{0}", end["at"]);
MessageBox.Show(a1);

}
}
}
}



是这样 这是项目完整的代码,用MessageBox.Show(a1);的方法,会显示完整的组内数值,我想要把它放到文本框里显示,就只有第一个值会显示出来,有没有什么解决方法?然后组里每个数值我都可以取出来赋值给一定变量随便调用的?
XBodhi. 2019-07-31
  • 打赏
  • 举报
回复
string jsonString = "{\"errno\":0,\"data\":{\"count\":5,\"datastreams\":[{\"datapoints\":[{\"at\":\"2019-07-28 17:58:31.518\",\"value\":1},{\"at\":\"2019-07-28 17:58:27.530\",\"value\":1},{\"at\":\"2019-07-28 17:58:23.520\",\"value\":1},{\"at\":\"2019-07-28 17:58:19.684\",\"value\":1},{\"at\":\"2019-07-28 17:58:15.748\",\"value\":1}],\"id\":\"3325_0_5700\"}]},\"error\":\"succ\"}";
ErrorInfo errorInfo = JsonConvert.DeserializeObject<ErrorInfo>(jsonString);
XBodhi. 2019-07-31
  • 打赏
  • 举报
回复
你试试这个,我没有测试,
XBodhi. 2019-07-31
  • 打赏
  • 举报
回复


{
"errno": 0,
"data": {
"count": 5,
"datastreams": [{
"datapoints": [{
"at": "2019-07-28 17:58:31.518",
"value": 1
}, {
"at": "2019-07-28 17:58:27.530",
"value": 1
}, {
"at": "2019-07-28 17:58:23.520",
"value": 1
}, {
"at": "2019-07-28 17:58:19.684",
"value": 1
}, {
"at": "2019-07-28 17:58:15.748",
"value": 1
}],
"id": "3325_0_5700"
}]
},
"error": "succ"
}


{
"errno": 0,
"data": {
"count": 5,
"datastreams": [{
"datapoints": [{
"at": "2019-07-28 17:58:31.518",
"value": 1
}, {
"at": "2019-07-28 17:58:27.530",
"value": 1
}, {
"at": "2019-07-28 17:58:23.520",
"value": 1
}, {
"at": "2019-07-28 17:58:19.684",
"value": 1
}, {
"at": "2019-07-28 17:58:15.748",
"value": 1
}],
"id": "3325_0_5700"
}]
},
"error": "succ"
}


public class ErrorInfo
{
public int Errno{get;set;}
public ErrorInfoData Data{get;set;}
public string Error{get;set;}
}

public class ErrorInfoData
{
public int Count {get;set;}
public Datastream[] Datastreams {get;set;}
}

public class Datastream
{
public string Id{get;set;}
public DataPoint[] DataPoints{get;set;}
}

public class DataPoint
{
public string At {get;set;}
public int Value {get;set;}
}


小白xqr 2019-07-31
  • 打赏
  • 举报
回复
引用 4 楼 XBodhi.的回复:
推荐你用 json 返回序列化成对象直接绑定。
json也是会遇到这个问题 组里的值不知道怎么取出来
小白xqr 2019-07-31
  • 打赏
  • 举报
回复
引用 4 楼 XBodhi.的回复:
推荐你用 json 返回序列化成对象直接绑定。
有完整解决方案吗,新手真的很多地方都不懂,哭了
XBodhi. 2019-07-31
  • 打赏
  • 举报
回复
推荐你用 json 返回序列化成对象直接绑定。
小白xqr 2019-07-31
  • 打赏
  • 举报
回复
引用 1 楼 娃都会打酱油了的回复:

foreach(Match match in Regex.Matches(txt,@"""at"":""([^""]*)""[^""]*""value"":([^}]*)"))
{
match.Groups[1].Value //at
match.Groups[2].Value //value
}
大佬大佬在不在组里每一个值都要取出来用的
小白xqr 2019-07-31
  • 打赏
  • 举报
回复
引用 1 楼 娃都会打酱油了的回复:

foreach(Match match in Regex.Matches(txt,@"""at"":""([^""]*)""[^""]*""value"":([^}]*)"))
{
match.Groups[1].Value //at
match.Groups[2].Value //value
}
大佬,这个数据只有第一组可以显示到文本框控件中,后面的应该怎么处理?
  • 打赏
  • 举报
回复

foreach(Match match in Regex.Matches(txt,@"""at"":""([^""]*)""[^""]*""value"":([^}]*)"))
{
match.Groups[1].Value //at
match.Groups[2].Value //value
}
加载更多回复(11)

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧