elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Desglosar un string en partes.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Desglosar un string en partes.  (Leído 936 veces)
**Aincrad**


Desconectado Desconectado

Mensajes: 506



Ver Perfil
Desglosar un string en partes.
« en: 26 Diciembre 2018, 21:21 »

bueno quiero separar todo este texto en partes. pero no se como hacerlo.

texto>

 
Código
  1.  {"error":false,"title":"Alan Walker - Diamond Heart (feat. Sophia Somajo)","duration":218,"file":"http:\/\/michaelbelgium.me\/ytconverter\/download\/sJXZ9Dok7u8.mp3"}



Quiero separarlo en partes , como cuando se lee un archivo .ini, asi >

el "error": | "title": | "duration" | "file": | quiero obtener el resultado que le sigue. Por ejemplo el de error el resultado es false , es algo así como leer un .ini.

gracias de antemano!!


En línea


Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: Desglosar un string en partes.
« Respuesta #1 en: 26 Diciembre 2018, 22:16 »

El formato se conoce como JSON.

Teniendo un string JSON como este (el cual he formateado para que sea legible, pero no es necesario hacerlo):
Código
  1. Dim jsonStr As String =
  2.    <json>
  3.    {
  4.       "error":false,
  5.       "title":"Alan Walker - Diamond Heart (feat. Sophia Somajo)",
  6.       "duration":218,
  7.       "file":"http:\/\/michaelbelgium.me\/ytconverter\/download\/sJXZ9Dok7u8.mp3"
  8.    }
  9.    </json>.Value

Si quieres llevar a cabo una conversión genérica, me refiero, de uso reutilizable, entonces:
Código
  1. Dim dict As Dictionary(Of String, Object) =
  2.    New JavaScriptSerializer().Deserialize(Of Dictionary(Of String, Object))(jsonStr)
...
Código
  1. For Each item As KeyValuePair(Of String, Object) In dict
  2.    Console.WriteLine("{0}: {1}", item.Key, item.Value.ToString())
  3. Next item
...
Código
  1. Console.WriteLine(CBool(dict("error")))
  2. Console.WriteLine(CStr(dict("title")))
  3. Console.WriteLine(CInt(dict("duration")))
  4. Console.WriteLine(CStr(dict("file")))

Si por lo contrario quieres una solución adaptada al string JSON que has mostrado, entonces:
Código
  1. <Serializable>
  2. Public NotInheritable Class MyType
  3.    Public Property [Error] As Boolean
  4.    Public Property Title As String
  5.    Public Property Duration As Integer
  6.    Public Property File As String
  7.  
  8.    Public Sub New()
  9.    End Sub
  10.  
  11.    Public Overrides Function ToString() As String
  12.        Return New JavaScriptSerializer().Serialize(Me).ToString
  13.    End Function
  14. End Class
...
Código
  1. Dim obj As MyType = New JavaScriptSerializer().Deserialize(Of MyType)(jsonStr)
  2. Console.WriteLine(obj.ToString())

PD: Para soluciones algo más sofisticadas siempre puedes utilizar la librería gratuita JSON.NET (la cual usan empresas tan profesionales como Google y Microsoft para algunas de sus APIs para .NET).

Saludos.


« Última modificación: 26 Diciembre 2018, 22:22 por Eleкtro (sin pilas) » En línea


**Aincrad**


Desconectado Desconectado

Mensajes: 506



Ver Perfil
Re: Desglosar un string en partes.
« Respuesta #2 en: 26 Diciembre 2018, 22:22 »

Gracias de responder como siempre @Elektro, pero estoy trabajando con .net framework 4.0 , en vs 2010.

Código:
El tipo 'JavaScriptSerializer' no está definido.

no quiero usar ningún tipo de librería., simplemente quiero leerlo como si fuera un .txt

No es posible mejor desglosarlo todo como si se estuviera leyendo un .ini?.
« Última modificación: 26 Diciembre 2018, 22:26 por **Aincrad** » En línea


Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: Desglosar un string en partes.
« Respuesta #3 en: 26 Diciembre 2018, 22:31 »

Gracias de responder como siempre @Elektro, pero estoy trabajando con .net framework 4.0 , en vs 2010.

Según la documentación oficial, la clase JavaScriptSerializer está disponible a partir de .NET 3.5, por lo tanto no deberías tener problema...
https://docs.microsoft.com/en-us/dotnet/api/system.web.script.serialization.javascriptserializer?view=netframework-4.7.2
Asegúrate de haber añadido una referencia al ensamblado con nombre 'System.Web.Extensions', e importar el esapacio de nombres 'System.Web.Script.Serialization'.

No es posible mejor desglosarlo todo como si se estuviera leyendo un .ini?.

Poder se puede, pero resultaría muy tedioso. Algo muy sencillo sería partir la cadena de texto usando la coma "," como caracter delimitador, con esto obtienes un array, entonces, cada elemento del array lo volverías a partir usando esta vez el caracter ":" como delimitador, y así obtener el nombre y el valor de cada cosa (ej: {"duration", "218"}), pero esto que en principio parece muy sencillo te podría dar problemas si el campo "title" contiene cualquiera de esos dos caracteres, por lo que habría que ingeniárselas mejor, y de ahí que sea tedioso. Sería mejor usar RegEx para capturar los valores (escritos entre comillas), pero no estoy por la labor de ponerme a construir una expresión regular, pudiendo recurrir a soluciones sofisticadas como la clase JavaScriptSerializer, o la librería JSON.NET.

Un saludo.
« Última modificación: 26 Diciembre 2018, 22:41 por Eleкtro (sin pilas) » En línea


**Aincrad**


Desconectado Desconectado

Mensajes: 506



Ver Perfil
Re: Desglosar un string en partes.
« Respuesta #4 en: 26 Diciembre 2018, 22:42 »



MOD: Imagen adaptada a lo permitido.
« Última modificación: 26 Diciembre 2018, 22:44 por MCKSys Argentina » En línea


Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: Desglosar un string en partes.
« Respuesta #5 en: 26 Diciembre 2018, 23:27 »

Vuelve a leer por favor:

Cita de: Elektro
Asegúrate de haber añadido una referencia al ensamblado con nombre 'System.Web.Extensions', e importar el espacio de nombres 'System.Web.Script.Serialization'.

El espacio de nombres que aparece en la imagen que has mostrado, no es el que he mencionado que debes importar. Y antes de poder importarlo, debes añadir una referencia al ensamblado que también mencioné.

Acabo de compilar en .NET 4.0 el código que mostré, y funciona perfectamente. Por otro lado, la clase JavaScriptSerializer NO está disponible en .NET 4.0 Client Profile. En resumen, el código lo puedes compilar con .NET 4.0 sin problemas, pero no lo puedes compilar en .NET 4.0 Client Profile.

Feliz Navidad.
En línea


**Aincrad**


Desconectado Desconectado

Mensajes: 506



Ver Perfil
Re: Desglosar un string en partes.
« Respuesta #6 en: 26 Diciembre 2018, 23:48 »

Perdona mi ignorancia, estoy en .NET 4.0 pero sigue con >

Código:
El tipo 'JavaScriptSerializer' no está definido.







En línea


Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: Desglosar un string en partes.
« Respuesta #7 en: 26 Diciembre 2018, 23:55 »

¿Puedes mostrar la pestaña "Referencias" o en su defecto pasarme el proyecto?.
En línea


**Aincrad**


Desconectado Desconectado

Mensajes: 506



Ver Perfil
Re: Desglosar un string en partes.
« Respuesta #8 en: 27 Diciembre 2018, 00:24 »

te envié el proyecto por priv,
En línea


Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: Desglosar un string en partes.
« Respuesta #9 en: 27 Diciembre 2018, 01:34 »

te envié el proyecto por priv,

En tu proyecto falta que añadas una referencia al ensamblado que te dije: System.Web.Extensions.dll. Una vez añadida la referencia, se puede utilizar la clase JavaScriptSerializer.

Dirígete a la pestaña "Referencias" y añade la maldita librería. xD

Saludos
En línea


Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines