如何检索路径为动态的属性的json值

时间:2016-03-28 06:50:54

标签: c# json asp.net-mvc json.net

如何在以下JSON中获取" full_name_ac" : -

{
    "rows": 10,
    "os": "0",
    "page": "1",
    "total": "1",
    "peoples": {
        **"123":** {
            "url": "http://google.com",
            **"id": "123",**
            "fname": "Rob",
            "lname": "Tom",
            "full_name_ac": "Rob Tom"
        }
    }
}

我无法创建模型,因为模型总是会根据" id"进行更改。

我正在尝试类似的东西但不确定如何获取full_name_ac的值

JObject obj = JObject.Parse(data);

6 个答案:

答案 0 :(得分:1)

使用Json.Net。尝试使用dyanamic

dynamic stuff = JsonConvert.DeserializeObject(YOUR-JSON_STRING);

string name = stuff.peoples.123.full_name_ac;

有关详细信息,请参阅此链接:Deserialize JSON into C# dynamic object?

  

模型总是会根据“id”进行更改。

如果您的模型始终更改,那么您创建了一个包含 id 字符串的模型。 String 对象是json字段字符串。这样您就可以检查Id和它的模型字段。所以你可以用json比较那些字段。

"field" :
{
    "id" : 123
    "fields" : 
    {
        "fname":"string",
        "full_name_ac":"string"
    }
}

创建类似于上面的json并在json中包含此json。反序列化主json时,可以比较字段。我从上面的事情你会得到一些基本的想法。

  

如果您的模型是动态的,那么只有一个选项,即您拥有   创建一个类似上面的json,其中包含字段。这样你就可以   将这些字段与您的实际json值进行比较。

答案 1 :(得分:1)

也许您可以使用Regex和一些基本的文本解析来识别“full_name_ac”属性,并减去该值,例如:

// just an example, untested
string jsonText = "{...}";
int startIndex = jsonText.indexOf(@"""full_name_ac"":");
int stopIndex = jsonText.indexOf(startIndex, "}");
string value = jsonText.substring(startIndex, stopIndex);

答案 2 :(得分:1)

我建议你看看使用JSONPath(s) and use SelectTokens

JObject obj = JObject.Parse(data);
var names = obj.SelectTokens("$.peoples.*.full_name_ac");

var allNamesAsCsv = String.Join(",", names.Values<string>()); 

当然,如果你总是知道总会有一个,你可以使用SelectToken

var onlyMatchObject = obj.SelectToken("$.peoples.*.full_name_ac");
var onlyMatch = first.Value<string>();

答案 3 :(得分:0)

获取反序列化对象所需标记的值(在您的情况下,obj.peoples具有第一个标记为“123”,第一个标记“123”是具有所需属性的对象)并获取所需属性,即full_name_ac从它。

        dynamic obj = JObject.Parse(jsonText);
        var value = obj.peoples;

        var tokenPeople = ((Newtonsoft.Json.Linq.JContainer)obj.peoples).First.First;
        string peopleJson =tokenPeople.ToString();
        dynamic people = JObject.Parse(peopleJson);
        string full_name_ac = people.full_name_ac;

答案 4 :(得分:0)

使用JObject.Parse(jsonString)并获取第一个元素

// Id is dynamic , so parse and get first element
string dynamicName = (string)JObject.Parse(data)["peoples"].Children().First().Children().First()["full_name_ac"];

答案 5 :(得分:0)

以下行可帮助您获取 full_name_ac

的值
var full_name_ac = obj.SelectToken("peoples.123.full_name_ac").ToString();