Member 14779968 Ответов: 2

Как написать эту функцию в C#, чтобы проверить, определен ли какой-либо объект после первого уровня в json


Я пытаюсь определить, является ли json вложенным или нет. Если он содержит второй объект после первого, то он вернет true, если не false.

function check_if_nested(obj) {
    check_nest=[]
    obj.map(function(e,i) {$.each(e, function(v){
      if(typeof(obj[0][v])=='object') {check_nest.push('nested')} else {check_nest.push('not nested')}
    })})
    if(check_nest.includes('nested')) {return(true)} else {return(false)}
    }


//Не вложенный
obj_1 = [{
    one: "apples",
    two: "oranges"
}]



Использование: check_if_nested(obj_1)

вывод: false

obj_2 = [{
    one: "apples",
    two: "oranges",
    children: [{
        three: "bananas",
        four: "jicamas"
    }]
}]


Использование: check_if_nested(obj_2)

вывод: правда

Что я уже пробовал:

новичок в c# я не знаю, как это сделать..

Dave Kreskowiak

То, что вы опубликовали, не является C#. Это javascript.

Member 14779968

можем ли мы написать это на C#?

2 Ответов

Рейтинг:
0

Dave Kreskowiak

То, что вы называете "вложенным", - это то, как json описывает массив.

Вы не можете напрямую преобразовать этот javascript в C#. C# изначально не обрабатывает json, как javascript.

Вы должны проверить json, используя класс, выделенный для этой цели, например JsonDocument[^].

Вы бы начали с рассмотрения типа корневого узла в документе. Это массив или нет? Переходите к следующему элементу, ища то, что вы ожидаете, основываясь на том, что вы уже нашли.


Рейтинг:
0

F-ES Sitecore

Вы можете сделать это с помощью Newtonsoft.Пакет Json, без сомнения, с любой другой библиотекой обработки json тоже.

private void ParseJson (JToken token)
{
    foreach (var prop in token.Children())
    {
        if (prop.Type == JTokenType.Property)
        {
            var p = prop as JProperty;

            bool isNested = IsNested(p);

            Console.WriteLine(p.Name + " " + isNested.ToString());
        }

    }
}

private bool IsNested(JProperty token)
{
    bool isNested = false;

    if (token.Value.Type == JTokenType.Object)
    {
        isNested = true;
    }
    else if (token.Value.Type == JTokenType.Array)
    {
        isNested = true;
    }

    return isNested;
}


использование;

var tokens = new List<JToken>();

string json = "[{one:\"apples\", two:\"oranges\", children:[{three:\"bananas\"}]}]";

dynamic jResult = JsonConvert.DeserializeObject(json);

var token = jResult as JToken;

if (token.Type == JTokenType.Array)
{
    tokens.AddRange(token.Children());
}
else
{
    tokens.Add(token);
}

foreach (var item in tokens)
{
    ParseJson(item);
}


В любом случае это отправная точка, вероятно, потребуется больше работы, чтобы сделать его более надежным и обрабатывать большее разнообразие json, это зависит от того, насколько переменным является ваш json.