Получить значение поля json с использованием регулярного выражения в c # [duplicate]

Лемма Pumping для правильных языков является причиной того, что вы не можете этого сделать.

Сгенерированный автомат будет иметь конечное число состояний, например k, поэтому a строка из k + 1 открывающих скобок обязана иметь состояние, повторяющееся где-то (поскольку автомат обрабатывает символы). Часть строки между одним и тем же состоянием может быть продублирована бесконечно много раз, и автомат не узнает разницу.

В частности, если он принимает k + 1 открывающих скобок, за которыми следуют k + 1 замыкающие скобки ( который он должен), он также примет количество накачиваемых открывающих скобок, за которым следуют неизменные k + 1 замыкающие браки (что не должно).

37
задан desto 1 October 2012 в 16:54
поделиться

5 ответов

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

EDIT: я изменил код, чтобы он читал ваш json-файл (массив)

. Код для синтаксического анализа:

void Main()
{
    var json = System.IO.File.ReadAllText(@"d:\test.json");

    var objects = JArray.Parse(json); // parse as array  
    foreach(JObject root in objects)
    {
        foreach(KeyValuePair<String, JToken> app in root)
        {
            var appName = app.Key;
            var description = (String)app.Value["Description"];
            var value = (String)app.Value["Value"];

            Console.WriteLine(appName);
            Console.WriteLine(description);
            Console.WriteLine(value);
            Console.WriteLine("\n");
        }
    }
}

Выход:

AppName
Lorem ipsum dolor sit amet
1


AnotherAppName
consectetur adipisicing elit
String


ThirdAppName
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
Text


Application
Ut enim ad minim veniam
100


LastAppName
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat
ZZZ

Кстати, вы можете использовать LinqPad , чтобы проверить свой код, проще, чем создавать решение или проект в Visual Studio. Я думаю.

35
ответ дан AZ. 21 August 2018 в 04:04
поделиться
  • 1
    -1 Исходный json - это JArray, а не JObject, как в вашем ответе – L.B 1 October 2012 в 19:19
  • 2
    @ L.B Вы правы, это было в спешке. Обновленный код считывает массив. – AZ. 1 October 2012 в 19:42
  • 3
    На самом деле первым решением (до редактирования) был тот, который работал на меня. – desto 2 October 2012 в 00:34
  • 4
    Вау. все примеры, которые я видел, использовали функции Serialize / Deserialize, и это было гораздо более запутанным, чем это. Я уверен, люблю foreach. – Jacque Goupil 22 July 2015 в 15:02

вы можете попробовать с помощью System.Web.Script.Serialization.JavaScriptSerializer:

var json = new JavaScriptSerializer();
var data = json.Deserialize<Dictionary<string, Dictionary<string, string>>[]>(jsonStr);
13
ответ дан Abel 21 August 2018 в 04:04
поделиться
  • 1
    он доступен в System.Web.Script.Serialization – Guillaume86 1 October 2012 в 16:59
  • 2
    Я действительно не думаю, что этот сериализатор будет работать со словарями – Evren Kuzucuoglu 1 October 2012 в 17:00
  • 3
    он делает, уже использовал его EDIT: просто проверил мой код с @desto json, отлично работает :) – Guillaume86 1 October 2012 в 17:04
  • 4
    Нет проблем, на самом деле JavascriptSeralizer по-прежнему используется в ASP.NET для WebMethods, поэтому он работает лучше, чем большинство людей думают ^^ – Guillaume86 1 October 2012 в 17:32
  • 5
    Возможно, вам потребуется добавить ссылку System.Web.Extensions в свой проект для доступа к этому классу. – Chris Stillwell 3 May 2017 в 16:05

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

var http = new HttpClient();
http.Request.Accept = HttpContentTypes.ApplicationJson;
var response = http.Get("url");
var body = response.DynamicBody;
Console.WriteLine("Name {0}", body.AppName.Description);
Console.WriteLine("Name {0}", body.AppName.Value);

On NuGet: EasyHttp

1
ответ дан Erwin 21 August 2018 в 04:04
поделиться

То, что вы пытаетесь десериализовать в словаре, на самом деле является объектом Javascript, сериализованным в JSON. В Javascript вы можете использовать этот объект как ассоциативный массив, но на самом деле это объект, что касается стандарта JSON.

Таким образом, у вас не было бы проблем десериализации того, что у вас есть со стандартным сериализатором JSON (например, .net, DataContractJsonSerializer и JavascriptSerializer) для объекта (с элементами, называемыми AppName, AnotherAppName и т. д.), но для фактического интерпретации этого как словаря вам понадобится сериализатор, который идет дальше, чем спецификация Json, Я знаю, что есть слова о словарях.

Одним из таких примеров является тот, который все используют: JSON .net

Существует другое решение, если вы не хотите использовать внешнюю библиотеку, которая должна преобразовать ваш объект Javascript в список, прежде чем сериализовать его в JSON.

var myList = [];
$.each(myObj, function(key, value) { myList.push({Key:key, Value:value}) });

теперь, если вы сериализовываете myList для объекта JSON, вы должны быть способный десериализовать до List<KeyValuePair<string, ValueDescription>> с любым из вышеупомянутых сериализаторов. Этот список тогда будет совершенно очевидным для преобразования в словарь.

Примечание: ValueDescription является этим классом:

public class ValueDescription
{
    public string Description { get; set; }
    public string Value { get; set; }
}
1
ответ дан Evren Kuzucuoglu 21 August 2018 в 04:04
поделиться
json:
[{"ew":"vehicles","hws":["car","van","bike","plane","bus"]},{"ew":"countries","hws":["America","India","France","Japan","South Africa"]}]

c # code: взять только одно значение, например, слово «велосипед».

//res=[{"ew":"vehicles","hws":["car","van","bike","plane","bus"]},{"ew":"countries","hws":["America","India","France","Japan","South Africa"]}]

         dynamic stuff1 = Newtonsoft.Json.JsonConvert.DeserializeObject(res);
         string Text = stuff1[0].hws[2];
         Console.WriteLine(Text);

output:

bike
14
ответ дан Kajan Thadsanamoorthy 21 August 2018 в 04:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: