首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为KairosDB api创建Json

为KairosDB api创建Json
EN

Stack Overflow用户
提问于 2018-07-05 08:34:04
回答 2查看 118关注 0票数 0

我想用post方法将数据发送到KairosDB,但是Json是不正确的。Json一定是这样的:

代码语言:javascript
复制
{
    "name":"Hermle_1",
    "datapoints":[
        [
            "1530710258000",
            23.0
        ],
        [
            "1530710257000",
            21.0
        ]
    ],
    "tags":{
        "SensorName":"capteur_temperature"
    }
}

对于数据点,我将Dictionary<string, float>添加到对象中。我序列化它时拥有的内容:

代码语言:javascript
复制
{
    "name":"Hermle_1",
    "datapoints":{
        "1530710258000":23.0,
        "1530710257000":21.0
    },
    "tags":{
        "SensorName":"capteur_temperature"
    }
}

如果我更改我的字典.ToArray(),我有以下Json:

代码语言:javascript
复制
{
    "name":"Hermle_1",
    "datapoints":[
        {
            "Key":"1530710258000",
            "Value":23.0
        },
        {
            "Key":"1530710257000",
            "Value":21.0
        }
    ],
    "tags":{
        "SensorName":"capteur_temperature"
    }    
}

我不知道如何为数据点生成预期格式的json。

编辑:如何创建对象:

代码语言:javascript
复制
dynamic jsonObj = new ExpandoObject();
jsonObj.name = sd.Engine_name;

Dictionary<string, float> datapoints = new Dictionary<string, float>();
Dictionary<string, string> tags = new Dictionary<string, string>();

tags.Add("SensorName", sensor.Name);

//.........
while (reader.Read())
{    
    datapoints.Add(Convert.ToString(reader["time"]),
    Convert.ToSingle(reader["value"]));
}
//....
jsonObj.datapoints = datapoints;
jsonObj.tags = tags;

string a = JsonConvert.SerializeObject(jsonObj, Formatting.Indented);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-05 08:50:39

正如我在上面的评论中所说的,datapoints不是一个Dictionary,而是一个List<List<object>>,它必须是object,因为您必须将stringfloat放在同一个列表中。

代码语言:javascript
复制
List<List<object>> datapoints = new List<List<object>>();
while (reader.Read()) {
    datapoints.Add(new List<object>{
        Convert.ToString(reader["time"]), 
        Convert.ToSingle(reader["value"])
    });
}
票数 1
EN

Stack Overflow用户

发布于 2018-07-05 09:03:00

如果您不确定如何将json字符串转换为类构造,请查看这个有用的工具。使用可以填充json数据的类结构的优点是,您不需要使用任何动态变量来序列化或反序列化json对象。

生成的C#代码如下所示:

代码语言:javascript
复制
public class Tags
{
    public string SensorName { get; set; }
}

public class RootObject
{
    public string Name { get; set; }
    public List<List<object>> Datapoints { get; set; }
    public Tags Tags { get; set; }
}

在查看了生成的代码之后,您可以看到哪里出错了。数据点的json使用的是列表的List(),而不是Dictionary<string, float>

现在使用它来生成json数据非常简单:

代码语言:javascript
复制
var root = new RootObject();
root.Name = sd.Engine_name;
root.Tags = new List
{
    new Tags {SensorName = sensor.Name}
};

var datapoints = new List<List<object>>();
while (reader.Read()) 
{
    datapoints.Add(new List<object>{
        Convert.ToString(reader["time"]), 
        Convert.ToSingle(reader["value"])
    });
}

root.Datapoints = datapoints;

var json = JsonConvert.SerializeObject(root, Formatting.Indented);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51186717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档